原文提供的分頁類代碼不完整,本文補全關鍵邏輯,解析屬性含義,並提供可直接使用的完整版本。
<?php
class page {
private $pagesize; // 每頁條數
private $lastpage; // 最後一頁頁碼
private $totalpages; // 總頁數
private $nums; // 總記錄數
private $numPage = 1; // 當前頁碼
public function __construct($page_size, $total_nums) {
$this->pagesize = $page_size;
$this->nums = $total_nums;
$this->lastpage = ceil($this->nums / $this->pagesize);
$this->totalpages = ceil($this->nums / $this->pagesize);
// 原文截斷處:應處理 $_GET 頁碼參數
}
}
?>
<?php
class Page {
private $pageSize; // 每頁大小
private $totalNums; // 總記錄數
private $totalPages; // 總頁數
private $currentPage; // 當前頁
public function __construct($pageSize, $totalNums, $pageParam = 'page') {
$this->pageSize = max(1, (int)$pageSize);
$this->totalNums = max(0, (int)$totalNums);
$this->totalPages = max(1, (int)ceil($this->totalNums / $this->pageSize));
// 從 GET 獲取頁碼,預設 1
$requested = isset($_GET[$pageParam]) ? (int)$_GET[$pageParam] : 1;
$this->currentPage = max(1, min($requested, $this->totalPages));
}
// 獲取 LIMIT 起始偏移量
public function getOffset() {
return ($this->currentPage - 1) * $this->pageSize;
}
// 獲取 LIMIT 條數
public function getLimit() {
return $this->pageSize;
}
// 生成分頁 HTML(Bootstrap 風格示例)
public function render($urlPattern = '?page={page}') {
if ($this->totalPages <= 1) return '';
$html = '';
return $html;
}
}
?>
<?php
// 1. 查詢總數
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$total = $pdo->query('SELECT COUNT(*) FROM articles')->fetchColumn();
// 2. 實例化分頁類
$page = new Page(10, $total); // 每頁 10 條
// 3. 查詢當前頁數據
$stmt = $pdo->prepare('SELECT * FROM articles ORDER BY id DESC LIMIT :offset, :limit');
$stmt->bindValue(':offset', $page->getOffset(), PDO::PARAM_INT);
$stmt->bindValue(':limit', $page->getLimit(), PDO::PARAM_INT);
$stmt->execute();
$articles = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 4. 輸出數據
foreach ($articles as $art) {
echo "<h3>{$art['title']}</h3>";
}
// 5. 輸出分頁導航
echo $page->render('list.php?page={page}');
?>
| 屬性 | 含義 | 計算方式 |
|---|---|---|
| pageSize | 每頁條數 | 構造函數傳入 |
| totalNums | 總記錄數 | SQL COUNT(*) 查詢 |
| totalPages | 總頁數 | ceil(totalNums / pageSize) |
| currentPage | 當前頁碼 | $_GET['page'] 邊界修正 |
| offset | SQL OFFSET | (currentPage - 1) * pageSize |
分頁類核心職責:計算 OFFSET/LIMIT、邊界修正當前頁、生成導航 HTML。本文補全版支援自定義 URL 模板、Bootstrap 風格輸出、PDO 參數綁定防注入,可直接投入項目使用。