zoukankan      html  css  js  c++  java
  • 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获取相应的数据的功能。

  • 相关阅读:
    Java UDP通信简单实现
    为什么要阅读——兼分享《首先,打破一切常规》[中译文]:世界顶级管理者的成功秘诀/(美)马库斯&#183;白金汉,(美)柯特&#183;科夫曼 著
    怎样提高团队管理能力9
    POJ2777 Count Color 线段树区间更新
    Swift和Objective-C混合编程——Swift调用OC
    LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    ZZUOJ-1195-OS Job Scheduling(郑州大学第七届ACM大学生程序设计竞赛E题)
    CentOS出错You don&#39;t have permission to access on this server
    string 和 vector 初探
    ICMP报文类型
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/9207902.html
Copyright © 2011-2022 走看看