當資料量龐大時,傳統「上一頁/下一頁」或列出所有頁碼都會導致介面擁擠、使用者體驗下降。分頁分組將頁碼按固定組數(如每組 5 頁)顯示,並提供「首組/上一組/下一組/尾組」快捷導航,是大型後台、列表頁的標準解法。
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 略...
}
一次設定總筆數、每組頁數、連結網址、當前頁/組。建議在 Controller 層呼叫。
function getTotalPage($totalNum, $curPage=0) {
return $this->totalPage = ceil($totalNum / $this->pagePerNum);
}
setCustomStyleString() 套用樣式)$this->pageQuerySql 供 SQL 直接拼接$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");
// 執行查詢...
?>
$_GET['cp']、$_GET['cpg'] 做 intval() 或正則驗證。setCustomStyle('page-btn') 後,輸出的頁碼會被 `` 包裹,方便 CSS 控制。SQL_CALC_FOUND_ROWS 或單獨 COUNT(*) 查詢,避免全表掃描。這個類別雖然基於舊版 mysql_* 函數,但邏輯清晰,易於移植至 PDO/MySQLi 環境,是快速建構分頁功能的優良起點。