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

ThinkPHP 3.2 分頁類 Page 完整使用指南:從基礎查詢到模板渲染

     編輯:PHP 相關知識

Page 類基本用法

ThinkPHP 3.2 內建分頁類位於 ThinkPHP/Extend/Library/ORG/Util/Page.class.php,核心參數:totalRows(總記錄數)、listRows(每頁條數)。

1. 標準 Model 查詢分頁


// 控制器動作
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();
}

2. 原生 SQL 分頁(複雜關聯查詢)


$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());

3. 查詢後數據處理再賦值


$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);

Page 類常用屬性與方法

屬性/方法說明默認值
firstRow當前頁起始行號(0 基)自動計算
listRows每頁顯示條數20
rollPage分頁導航顯示頁碼數量11
parameterURL 額外參數(如搜尋條件)''
setConfig()批量設置配置:['header'=>'共%TOTAL_ROW%條', 'prev'=>'上一頁', 'next'=>'下一頁']-
show()生成分頁 HTML 字符串-

模板渲染分頁導航


{* 模板文件 *}
<div class="pagination">
    {$page|raw} {* ThinkPHP 3.2 需 raw 過濾器輸出原始 HTML *}
</div>

進階:自定義分頁樣式(Bootstrap 4 範例)


$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 重寫下分頁錯誤:確保 URL_MODEL 配置正確,或手動構建 parameter。

結語

ThinkPHP Page 類封裝了分頁核心邏輯,配合 firstRow/listRows 與 show() 快速實現列表分頁。掌握 setConfig() 自定義主題、原生 SQL 分頁、後處理賦值等進階用法,能應對大多數業務場景。ThinkPHP 5/6 版本請參考 think\paginator\Paginator 新組件。

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