首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 通用分頁類實作:支援首頁、尾頁、上下頁與跳轉功能

     編輯:PHP 相關知識

前言

在 Web 開發中,分頁是處理大量資料時不可或缺的功能。本文介紹一個原創的 PHP 通用分頁函數 fPageCount(),支援首頁、尾頁、上一頁、下一頁、上十頁、下十頁,以及頁碼跳轉(下拉選單或輸入框)等完整功能,適合快速整合至各類專案中。

函數簽名與參數說明

function fPageCount($TotalResult, $numPerPage, $Page)
  • $TotalResult:總資料筆數
  • $numPerPage:每頁顯示筆數
  • $Page:目前頁碼

核心邏輯解析

1. 基礎設定與 URL 處理

函數開頭定義顯示頁碼數量($NaviLength = 10)、跳轉樣式($showMorePageGo_Type_)、導航圖示(使用 Webdings 字型)等常數。接著透過 $_SERVER['QUERY_STRING'] 取得目前查詢字串,並移除既有的 page 參數,重新組合成乾淨的分頁連結基底 $toPage_。

2. 總頁數與當前區塊計算

$tpagecount = ceil($TotalResult / $numPerPage);
$nowCoolPage = ceil($Page / $NaviLength);

將所有頁碼切分為每 10 頁一組的「區塊」,$nowCoolPage 代表目前所在的區塊編號。

3. 首頁/上十頁/上一頁 輸出

若在第一區塊,顯示灰色不可點擊的首頁與上十頁圖示;否則輸出可點擊的連結,目標頁碼分別為 1 與 $Page - $NaviLength。上一頁同理,若 $Page > 1 則輸出連結,否則灰色禁用。

4. 頁碼迴圈輸出

迴圈跑 1 到 $NaviLength,計算實際頁碼 $nowPage。若等於目前頁碼則以 <b> 標籤高亮,否則輸出連結;超過總頁數則 break 跳出。

5. 下一頁/下十頁/尾頁 輸出

邏輯與上一頁對稱:若在最後一區塊則灰色禁用,否則輸出對應連結($Page + 1、$Page + $NaviLength、$tpagecount)。

6. 跳轉功能(兩種模式)

  • 模式 1(輸入框):$showMorePageGo_Type_ == 1 時,輸出文字輸入框與按鈕,透過 JavaScript 跳轉。
  • 模式 2(下拉選單):預設模式,列出所有頁碼供選擇,目前頁碼自動 selected。

7. 統計資訊輸出

最後附加「每頁筆數、目前頁碼/總頁數、總資料筆數」等統計字串,方便前端直接顯示。

使用範例

<?php echo fPageCount($TotalResult, $numPerPage, $page); ?>

只需在顯示列表的頁面呼叫此函數,即可獲得完整分頁導航。

優化建議

  • 建議將 HTML 字串拼接改用 sprintf 或 Heredoc 提升可讀性。
  • 導航圖示可改用 SVG 或 Font Awesome,避免依賴 Webdings 字型。
  • 跳轉功能的 JavaScript 內聯寫法建議抽離為獨立函式,並加入輸入驗證。
  • 若專案使用 MVC 框架,可將此函數封裝為 Helper 或 Service 類別。

完整程式碼

分頁類示意圖

function fPageCount($TotalResult,$numPerPage,$Page){
    $NaviLength = 10;
    $showMorePageGo_Type_ = 0;
    $int_showNumberLink_ = '十';
    $nonLinkColor_ = "#999999";
    $toF_ = '<font face=webdings title="首頁">9</font>';
    $toP10_ = ' <font face=webdings title="上十頁">7</font>';
    $toP1_ = ' <font face=webdings title="上一頁">3</font>';
    $toN1_ = ' <font face=webdings title="下一頁">4</font>';
    $toN10_ = ' <font face=webdings title="下十頁">8</font>';
    $toL_ = '<font face=webdings title="最後一頁">:</font>';
    $page_index = "";

    $tpagecount = ceil($TotalResult/$numPerPage);
    $nowCoolPage = ceil($Page/$NaviLength);
    $toPage_ = $_SERVER['QUERY_STRING'];
    if ($toPage_ == '') {
        $toPage_ = "?page=";
    } else {
        $toPage_ = preg_replace("/&?page=d+/", '', $toPage_);
        $toPage_ = "?".$toPage_."&page=";
    }

    if($nowCoolPage == 1){
        $page_index.='<font color="'.$nonLinkColor_.'" title="首頁">'.$toF_.'</font> ';
        $page_index.='<font color="'.$nonLinkColor_.'" title="上'.$int_showNumberLink_.'頁">'.$toP10_.'</font> ';
    }else{
        $preRow = $Page-$NaviLength;
        $page_index.='<a href="'.$toPage_.'1" title="首頁">'.$toF_.'</a> ';
        $page_index.='<a href="'.$toPage_.$preRow.'" title="上'.$int_showNumberLink_.'頁">'.$toP10_.'</a> ';
    }
    $upRow = $Page-1;
    $downRow = $Page+1;
    if ($upRow>0){
        $page_index.='<a href="'.$toPage_.$upRow.'" title="上一頁">'.$toP1_.'</a> ';
    }else{
        $page_index.='<font color="'.$nonLinkColor_.'" title="上一頁">'.$toP1_.'</font> ';
    }

    for($i=1;$i<=$NaviLength;$i++){
        $nowPage=($nowCoolPage-1)*$NaviLength+$i;
        if($nowPage!=$Page){
            if($nowPage<=$tpagecount){
                $page_index.='  <a href="'.$toPage_.$nowPage.'>" .$nowPage. "</a> ";
            }else{
                break;
            }
        }else{
            if($tpagecount != 1){
                $page_index.='<b>'.$nowPage.'</b>';
            }
        }
    }
    if ($downRow <= $tpagecount){
        $page_index.='<a href="'.$toPage_.$downRow.'" title="下一頁">'.$toN1_.'</a> ';
    }else{
        $page_index.='<font color="'.$nonLinkColor_.'" title="下一頁">'.$toN1_.'</font> ';
    }
    if($nowCoolPage == $tpagecount){
        $page_index.=' <font color="'.$nonLinkColor_.'" title="下'.$int_showNumberLink_.'頁">'.$toN10_.'</font> ';
        $page_index.='<font color="'.$nonLinkColor_.'" title="尾頁">'.$toL_.'</font>';
    }else{
        $nextRow = $Page+$NaviLength;
        $theEndRow = $tpagecount;
        $page_index.=' <a href="'.$toPage_.$nextRow.'" title="下'.$int_showNumberLink_.'頁">'.$toN10_.'</a> ';
        $page_index.='<a href="'.$toPage_.$theEndRow.'" title="尾頁">'.$toL_.'</a>';
    }
    if ($showMorePageGo_Type_ ==1){
        $Show_Page_i = $Page + 1;
        if ($Show_Page_i>$tpagecount) $Show_Page_i = 1;
        $page_index.="  跳轉<input type='text' id='skip' value='' onkeyup='this.value=this.value.replace(/[^d]+/,'')' style='width:40px'/>  <input type='button' value='確定' class='btn' onclick='location.href=\"?page=\"+$(\"skip\").value+\"".$toPage_."\";'/>n";
    }else{
        $page_index.=" 跳轉:<select name='select' size='1' style='font-size: 12px' onchange='javascript:window.location.href=this.options[this.selectedIndex].value'>";
        for($i=1;$i<=$tpagecount;$i++){
            if($Page==$i){
                $selected=" selected";
            }else{
                $selected="";
            }
            $page_index.=" <option value=".$toPage_.$i;
            $page_index.=$selected." style='color:#FF0000'";
            $page_index.=">第".$i."頁</option>";
        }
        $page_index.="</select>";
    }
    $page_index.=$p_.$sp2_."  每頁<b>".$numPerPage."</b>個記錄,現在是:<b><span class='tx'>".$sp2_.$Page."</span>/".$tpagecount."</b>頁,共<b><span id='recordcount'>".$sp2_.$TotalResult."</span></b>個記錄。";
    return $page_index;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved