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

ThinkPHP Page 分頁類完整使用教學:基本分頁、SQL 配合、資料後處理

     編輯:PHP 綜合知識

引入與基本用法

import('ORG.Util.Page');

$db = M('article');
$where = ['status' => 1];
$count = $db->where($where)->count();

$page = new Page($count, 10); // 每頁 10 筆
$limit = $page->firstRow . ',' . $page->listRows; // "0,10"

$list = $db->where($where)->limit($limit)->select();

$this->assign('list', $list);
$this->assign('page', $page->show()); // 輸出分頁 HTML
$this->display();

模板顯示分頁

<div class="pagination">
  {$page}
</div>

show() 會輸出類似:<a href="?p=1">1</a> <span>2</span> <a href="?p=3">3</a> ...

配合原生 SQL 查詢

$Model = new Model();
$sql = "SELECT id, title FROM __PREFIX__article WHERE status=1 LIMIT {$page->firstRow}, {$page->listRows}";
$list = $Model->query($sql);

分頁參數自訂

$page = new Page($count, 15);
$page->parameter = 'cid=5&type=hot'; // 額外 URL 參數
$page->rollPage = 5;                 // 顯示頁碼數量
$page->setConfig('header', '筆記錄');
$page->setConfig('prev', '上一頁');
$page->setConfig('next', '下一頁');
$page->setConfig('first', '首頁');
$page->setConfig('last', '末頁');
$page->setConfig('theme', '%FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END% %HEADER%');

資料後處理再賦值

$list = $db->where($where)->limit($limit)->select();

// 例如:格式化時間、截取摘要
foreach ($list as &$v) {
    $v['create_time'] = date('Y-m-d H:i', $v['create_time']);
    $v['summary'] = msubstr($v['content'], 0, 100);
}

$this->assign('list', $list);

Ajax 分頁(無刷新)

<script>
$('.pagination a').on('click', function(e) {
    e.preventDefault();
    var url = $(this).attr('href');
    $.get(url, function(html) {
        $('#list-container').html(html); // 後端返回局部模板片段
    });
});
</script>

後端判斷 IS_AJAX 返回 $this->fetch('partial_list')。

常見問題

  • 分頁連結錯誤:確認 URL_MODEL 設定(0/1/2/3)與 show() 生成的連結一致。
  • 總數為 0 仍顯示分頁:if ($count) { $page = new Page(...); }。
  • 大數據量 count 慢:使用觸發器維護計數表、或 EXPLAIN 優化索引、或緩存總數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved