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獲取相應的數據的功能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM