當留言板、文章列表等數據量增長時,分頁成為必需功能。本文以 ThinkPHP 3.1 為例,詳細講解框架內建 Page 類的控制器實例化、模板變量賦值、前端渲染全流程。
count() 統計總記錄數Page 類實例化與參數配置limit() 限制查詢範圍show() 生成分頁 HTML 片段<?php
class MsgManageAction extends CommonAction {
public function index() {
// 1. 載入分頁類
import('ORG.Util.Page'); // 對應 ThinkPHP/Extend/Library/ORG/Util/Page.class.php
// 2. 取得總記錄數
$count = M('board')->count();
// 3. 實例化分頁對象:每頁 10 條
$page = new Page($count, 10);
// 4. 組裝 LIMIT 子句
// $page->firstRow 當前頁起始偏移(第 1 頁為 0,第 2 頁為 10...)
// $page->listRows 每頁條數(此處為 10)
$limit = $page->firstRow . ',' . $page->listRows;
// 5. 查詢當前頁數據
$board = M('board')
->order('time DESC')
->limit($limit)
->select();
// 6. 賦值給模板
$this->board = $board; // 數據列表
$this->page = $page->show(); // 分頁導航 HTML
$this->display();
}
public function delete() {
$id = I('id', '', 'intval');
if (M('board')->delete($id)) {
$this->success('刪除成功', U('index'));
} else {
$this->error('刪除失敗');
}
}
}
?>
補充說明:show() 是 3.1 新增的「內容解析輸出」方法,無需模板文件即可直接返回渲染後的 HTML 字串,適合 AJAX 回傳或動態模板場景。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Message Board BackGround</title>
</head>
<body>
<table class="table" border="1">
<tr>
<th>ID</th>
<th>發布者</th>
<th>內容</th>
<th>發布時間</th>
<th>操作</th>
</tr>
<foreach name='board' item='b'>
<tr>
<td>{$b.id}</td>
<td>{$b.username}</td>
<td>{$b.content}</td>
<td>{$b.time|date='y-m-d H:i',###}</td>
<td><a href="{:U('admin.php/MsgManage/delete',array('id'=>$b['id'])),''}">刪除</a></td>
</tr>
</foreach>
<!-- 分頁導航行 -->
<tr>
<td colspan='5' align='center'>
{$page}
</td>
</tr>
</table>
</body>
</html>
colspan='5' 合併單元格使分頁居中顯示{$page} 直接輸出控制器賦值的分頁 HTML(包含首頁、上一頁、頁碼、下一頁、尾頁等鏈接)U() 生成完整 URLPage 類覆寫 show() 實現自定義樣式(如 Bootstrap 分頁)$page->rollPage = 5 控制顯示頁碼數量$page->setConfig('header', '筆記錄') 修改提示文字$page->ajaxReturn() 回傳 JSON