PHP读取文件夹数据,并分页

protected function read_all ($dir){
        // 确保目录有权限进入
        if(!is_dir($dir)) return false;
        $handle = opendir($dir);

        if($handle){
            while(($fl = readdir($handle)) !== false){ // 从目录句柄中读取条目
                // 处理成绝对路径
                $temp = $dir.DIRECTORY_SEPARATOR.$fl;
                // 判断是目录还是文件,并去除 . 和 ..
                if(is_dir($temp) && $fl!='.' && $fl != '..'){
                    $data[] = [
                        'type' => 'folder',
                        'name' => $temp,
                        'only_name' => $fl,
                        'update_time' => date("Y-m-d H:i:s",filemtime($temp))
                    ];
                }else{
                    if($fl!='.' && $fl != '..'){
                        $data[] = [
                            'type' => 'file',
                            'name' => $temp,
                            'only_name' => $fl,
                            'update_time' => date("Y-m-d H:i:s",filemtime($temp))
                        ];
                    }
                }
            }
        }

        // 得到目录文件和文件夹数据,并返回
        return $data;
}

分页实现,每次都读取全部数据,根据页数,截取部分展示。

public function index(){
        // 获取目标路径所有文件夹及其文件数据
        $root_path = C('DEFAULT_PATH');
        $target_path = $_GET['target_path'] ? $_GET['target_path'] : $root_path;
        if(strpos($target_path,$root_path) !== 0){
            $target_path = $root_path;
        }
        $relative_path = str_replace($root_path,"",$target_path);
        $this->assign('relative_path',$relative_path);
        $this->assign('root_path',$root_path);
        $this->assign('target_path',$target_path);
        $all_data = $this->read_all($target_path);


        // 页数参数,默认第一页
        $page = $_GET['page'] ? $_GET['page'] : 1;
        // 每页数目
        $step = C('PAGE_NORMAL_COUNT');
        // 每次获取起始位置
        $start = ($page-1)*$step;
        // 获取数组中当前页的数据
        $page_data = array_slice($all_data,$start,$step);
        $this->assign('page_data',$page_data);

        // 获取分页所需数据,支持传递其他条件参数
        $page_model = D('Page');
        $model_flag = $page_model->arr($all_data,$page,$step,'&target_path='.$target_path);
        $this->assign('allPage',$model_flag);

        $this->display();
}

下面看看Page具体实现
html部分

<div class="pagination" id="pages" style="float:right;">
    <ul>
        <li><a href="__ACTION__?page=1{$allPage['prefix_page']}{$allPage.tail}">首页</a></li>
        <li><a href="__ACTION__?page={$allPage['prev_page']}{$allPage['prefix_page']}{$allPage.tail}">上一页</a></li>
        <php> for ($i = $allPage['page_start']; $i <= $allPage['page_end']; $i++) {
            if ($i == $allPage['page']) { </php>
        <li class="active"> <a href="__ACTION__?page=<php>echo $i;</php>{$allPage['prefix_page']}{$allPage.tail}">
            <php> echo $i; </php>
        </a> </li>
        <php> } else { </php>
        <li><a href="__ACTION__?page=<php>echo $i;</php>{$allPage['prefix_page']}{$allPage.tail}">
            <php> echo $i; </php>
        </a></li>
        <?php
                 }
          }
    ?>
        <li><a href="__ACTION__?page={$allPage['next_page']}{$allPage['prefix_page']}{$allPage.tail}">下一页</a></li>
        <li><a href="__ACTION__?page={$allPage['page_all']}{$allPage['prefix_page']}{$allPage.tail}">尾页</a></li>
    </ul>
</div>

分页数据部分

/**
 * 数组分页
 */
public function arr($arr,$page,$page_step='',$prefix_page='') {
    // 第一返回总数目
    $data['count'] = count($arr);
    $page_step = $page_step ? $page_step : C('PAGE_NORMAL_COUNT');
    //第二返回总页数
    $data['page_all']=(int)ceil($data['count']/$page_step);

    //第三返回底标的分页数组
    $page_start=$page-2;
    if($data['page_all']>5){
        if($page_start<=0){
            $page_start=1;
            $page_end=5;
        }else{
            $page_end=$page+2;
            if($page_end>=$data['page_all']){
                $page_end=$data['page_all'];
                $page_start=$page_end-4;
            }
        }
    }else{
        $page_start=1;
        $page_end=$data['page_all'];
    }
    $data['page_start']=$page_start;
    $data['page_end']=$page_end;
    //第四返回当前页
    $data['page']=$page;
    //第五 返回上一页和下一页
    $prev_page=$page-1;
    if($prev_page<=0){
        $prev_page=1;
    }
    $next_page=$page+1;
    if($next_page>=$data['page_all']){
        $next_page=$data['page_all'];
    }
    $data['prev_page']=$prev_page;
    $data['next_page']=$next_page;

    // 第六返回其他条件参数
    $data['prefix_page']=$prefix_page;

    return $data;
}

分页的原理,就是获取上一页,下一页,首页,尾页,当前页,当前页区间的几页数据,并展示,并实现跳转。并根据传入的page获取相应的数据的功能。

posted @ 2018-06-21 11:09  TBHacker  阅读(1593)  评论(0编辑  收藏  举报