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

PHP 分頁類庫實現:數字分頁與文字分頁雙模式封裝

     編輯:PHP 相關知識

PHP 分頁類庫實現:數字分頁與文字分頁雙模式封裝

分頁是 Web 開發高頻功能。本文提供一個可復用的 PHP 分頁函數庫,支援數字分頁(1 2 3 4 5)與文字分頁(首頁 上一頁 下一頁 尾頁)兩種模式,並將分頁參數計算與 HTML 輸出分離,便於維護與擴展。

核心架構:兩個函數分工協作

  1. pageParam($sql, $size):計算分頁參數(總記錄數、總頁數、當前頁、偏移量),存入全域變數
  2. paging($pageType):根據類型輸出分頁 HTML(1=數字,2=文字)

完整代碼實現

1. 分頁參數計算 pageParam()

/**
 * 分頁參數初始化
 * @param string $sql 統計總數的 SQL
 * @param int $size 每頁筆數
 */
function pageParam($sql, $size) {
    global $pagestart, $pagesize, $total, $page, $pageTotal;
    
    $pagesize = $size;
    $total = mysql_num_rows(queryDB($sql)); // 需自行實現 queryDB()
    
    // 處理當前頁參數
    if (isset($_GET['page'])) {
        $page = $_GET['page'];
        if (empty($page) || $page < 0 || !is_numeric($page)) $page = 1;
        else $page = intval($page);
    } else {
        $page = 1;
    }
    
    // 計算總頁數
    $pageTotal = ($total == 0) ? 1 : ceil($total / $pagesize);
    
    // 修正頁碼越界
    if ($page > $pageTotal) $page = $pageTotal;
    
    // 當前頁起始偏移量
    $pagestart = ($page - 1) * $pagesize;
}

2. 分頁 HTML 輸出 paging()

/**
 * 輸出分頁 HTML
 * @param int $pageType 1=數字分頁, 2=文字分頁
 */
function paging($pageType) {
    global $pageTotal, $page, $total;
    
    if ($pageType == 1) { // 數字分頁
        echo '
    '; for ($i = 0; $i < $pageTotal; $i++) { $p = $i + 1; $class = ($page == $p) ? ' class="selected"' : ''; echo "
  • {$p}
  • "; } echo '
'; } elseif ($pageType == 2) { // 文字分頁 echo '
    '; echo "
  • {$page}/{$pageTotal}頁 |
  • "; echo "
  • 共{$total}個會員 |
  • "; // 首頁/上一頁 if ($page == 1) { echo '
  • 首頁 |
  • 上一頁 |
  • '; } else { $script = $_SERVER["SCRIPT_NAME"]; // 當前腳本名,利於移植 echo "
  • 首頁 |
  • "; echo "
  • 上一頁 |
  • "; } // 下一頁/尾頁 if ($page == $pageTotal) { echo '
  • 下一頁 |
  • 尾頁 |
  • '; } else { $script = $_SERVER["SCRIPT_NAME"]; echo "
  • 下一頁 |
  • "; echo "
  • 尾頁 |
  • "; } echo '
'; } }

使用範例

// 1. 初始化分頁參數(SQL 為統計總數查詢,每頁 2 筆)
pageParam("SELECT userid FROM user", 2);

// 2. 在需要顯示分頁處調用
// 文字分頁


// 數字分頁

進階優化建議

  • 移除全域變數依賴:改用類封裝,屬性保存狀態,方法返回 HTML 字串而非直接輸出
  • 支援 URL 參數保持:自動保留除 page 外的其他 GET 參數
  • 加入省略號:頁碼過多時顯示 1 ... 5 6 7 ... 20,參考第 144035 篇文章的偏移量邏輯
  • 資料庫抽象層:將 mysql_* 替換為 PDO 或 mysqli,防止 SQL 注入

效果展示

文字分頁效果 數字分頁效果

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved