• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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" >
    <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获取相应的数据的功能。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
phpcurl伪造IP来源的实例代码发布时间:2022-07-10
下一篇:
二分法php发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap