ThinkPHP 3.2 內建分頁類位於 ThinkPHP/Extend/Library/ORG/Util/Page.class.php,核心參數:totalRows(總記錄數)、listRows(每頁條數)。
// 控制器動作
public function index() {
// 1. 引入類
import('ORG.Util.Page');
// 2. 條件構建
$where = ['status' => 1, 'type' => 2];
// 3. 獲取總數
$count = M('Article')->where($where)->count();
// 4. 實例化分頁對象
$page = new Page($count, 15); // 每頁 15 條
// 5. 獲取 LIMIT 子句
$limit = $page->firstRow . ',' . $page->listRows; // 如 "0,15"
// 6. 執行分頁查詢
$list = M('Article')->where($where)->limit($limit)->select();
// 7. 生成分頁導航 HTML
$show = $page->show();
// 8. 模板賦值
$this->assign('list', $list);
$this->assign('page', $show);
$this->display();
}
$count = M()->query("SELECT COUNT(*) AS c FROM article a JOIN cate c ON a.cate_id=c.id WHERE a.status=1")[0]['c'];
$page = new Page($count, 20);
$sql = "SELECT a.*, c.name AS cate_name FROM article a JOIN cate c ON a.cate_id=c.id WHERE a.status=1 LIMIT {$page->firstRow},{$page->listRows}";
$list = M()->query($sql);
$this->assign('list', $list);
$this->assign('page', $page->show());
$list = M('Article')->where($where)->limit($limit)->select();
// 後處理:格式化日期、截取摘要、關聯附件等
foreach ($list as &$item) {
$item['create_time'] = date('Y-m-d', $item['create_time']);
$item['summary'] = msubstr($item['content'], 0, 120); // 自定義截取函數
}
$this->assign('list', $list);
| 屬性/方法 | 說明 | 默認值 |
|---|---|---|
firstRow | 當前頁起始行號(0 基) | 自動計算 |
listRows | 每頁顯示條數 | 20 |
rollPage | 分頁導航顯示頁碼數量 | 11 |
parameter | URL 額外參數(如搜尋條件) | '' |
setConfig() | 批量設置配置:['header'=>'共%TOTAL_ROW%條', 'prev'=>'上一頁', 'next'=>'下一頁'] | - |
show() | 生成分頁 HTML 字符串 | - |
{* 模板文件 *}
<div class="pagination">
{$page|raw} {* ThinkPHP 3.2 需 raw 過濾器輸出原始 HTML *}
</div>
$page = new Page($count, 15);
$page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');
$page->setConfig('header', '共 %TOTAL_ROW% 條,第 %NOW_PAGE%/%TOTAL_PAGE% 頁');
$page->setConfig('prev', '« 上一頁');
$page->setConfig('next', '下一頁 »');
$page->setConfig('first', '首頁');
$page->setConfig('last', '尾頁');
$page->setConfig('link', '%PAGE%');
$page->setConfig('span', '%PAGE%');
// 生成的 HTML 需配合 CSS 樣式
$page->parameter = 'keyword=xxx&type=1'; 或在路由中包含參數。EXPLAIN 優化索引。URL_MODEL 配置正確,或手動構建 parameter。ThinkPHP Page 類封裝了分頁核心邏輯,配合 firstRow/listRows 與 show() 快速實現列表分頁。掌握 setConfig() 自定義主題、原生 SQL 分頁、後處理賦值等進階用法,能應對大多數業務場景。ThinkPHP 5/6 版本請參考 think\paginator\Paginator 新組件。