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

PHP 分頁分組類:輕鬆實現大數據分頁導航

     編輯:PHP 綜合知識

為什麼需要分頁分組?

當資料量龐大時,傳統「上一頁/下一頁」或列出所有頁碼都會導致介面擁擠、使用者體驗下降。分頁分組將頁碼按固定組數(如每組 5 頁)顯示,並提供「首組/上一組/下一組/尾組」快捷導航,是大型後台、列表頁的標準解法。

核心類別結構:mysqlPager

class mysqlPager {
    // 設定屬性
    var $pagePerNum  = 5;  // 每頁筆數
    var $pagePerGroup = 5; // 每組頁碼數
    var $curPage = 0;      // 當前頁
    var $totalPage = 0;    // 總頁數
    var $totalNum = 0;     // 總筆數
    var $curPageGroup = 0; // 當前組別
    var $curPageUrl = '';  // 分頁連結基址
    var $customStyle = ''; // 自訂 CSS 樣式
    var $pageQuerySql = ''; // 產生的 LIMIT 子句

    // 建構子、初始化、Setter/Getter 略...
}

關鍵方法解析

1. 初始化:InitAllVar()

一次設定總筆數、每組頁數、連結網址、當前頁/組。建議在 Controller 層呼叫。

2. 取得總頁數:getTotalPage()

function getTotalPage($totalNum, $curPage=0) {
    return $this->totalPage = ceil($totalNum / $this->pagePerNum);
}

3. 顯示導航:showNavPager()

  • 自動計算當前組的起始/結束頁碼
  • 產生「上一組」「下一組」連結
  • 高亮當前頁(可配合 setCustomStyleString() 套用樣式)
  • 同步產生 $this->pageQuerySql 供 SQL 直接拼接

4. 取得完整查詢 SQL:getQuerySqlStr()

$sql = "SELECT * FROM news";
$fullSql = $pager->getQuerySqlStr($sql);
// 產生:SELECT * FROM news LIMIT 0,5

使用範例

<?php
// 取得 GET 參數
$curPage = isset($_GET['cp']) ? intval($_GET['cp']) : 1;
$curPageGroup = isset($_GET['cpg']) ? intval($_GET['cpg']) : 1;

// 實例化並初始化
$pager = new mysqlPager();
$pager->InitAllVar($totalRows, 5, 'list.php', $curPage, $curPageGroup);

// 輸出導航 HTML
echo $pager->showNavPager();

// 取得帶 LIMIT 的 SQL
$querySql = $pager->getQuerySqlStr("SELECT id, title FROM news ORDER BY id DESC");
// 執行查詢...
?>

進階提示

  1. 防注入:務必對 $_GET['cp']、$_GET['cpg'] 做 intval() 或正則驗證。
  2. 樣式客製:呼叫 setCustomStyle('page-btn') 後,輸出的頁碼會被 `` 包裹,方便 CSS 控制。
  3. 大資料優化:若總筆數極大,建議改用 SQL_CALC_FOUND_ROWS 或單獨 COUNT(*) 查詢,避免全表掃描。

這個類別雖然基於舊版 mysql_* 函數,但邏輯清晰,易於移植至 PDO/MySQLi 環境,是快速建構分頁功能的優良起點。

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