分頁的功能,官網上面已經有說明了,Bakery 上也有很多相關的說明,都可以參考。我寫了一個簡單的範例程式來說明CakePHP的pagination如何使用。
Controller:post_controller.php
class PostController extends AppController {
public $name = 'Post';
public $uses = null;
function all() {
$this->paginate = array(
'fields' => array('Article.id', 'Article.title', 'Article.created'), /* 選擇要顯示的資料庫欄位 */
'limit' => 3, /* 每頁幾筆資料 */
'order' => 'Article.created desc' /* 預設的排序方式 */
);
$this->loadModel("Article"); /* 載入 Model */
//$this->Article->recursive = false; /* 如果 Model 有 hasOne, hasMany 等對應關係,且不需要時,把 recursive 設成 false */
$this->Article->recursive = 0; /* 如果 Model 有 hasOne, hasMany 等對應關係,且不需要時,把 recursive 設成 0 */
$this->set('articles', $this->paginate($this->Article,"Article.user_id='".$this->UserID."'")); /* 使用 paginate 函式取得資料,第二個參數可設定條件 */
}// all
}
View: all.ctp
<table border='1' bordercolor='#cccccc' cellspacing='0' cellpadding='5' width='80%' align='center'>
<?php
$th = array($paginator->sort("標題", "title"), $paginator->sort("建立時間", "created"), "操作"); /* 在版型的標題上,加入可以針對欄位做排序的功能 */
echo $html->tableHeaders($th);
$size = count($articles);
for($i = 0; $i < $size; $i++) {
$tr = array($articles[$i]["Article"]["title"], $articles[$i]["Article"]["created"], "<a href='/post/edit/".$articles[$i]["Article"]["id"]."'>編輯</a>"); /* 顯示資料 */
echo $html->tableCells($tr, array("bgcolor"=>"#999999"), array("bgcolor"=>"white"));
}// end for
?>
</table>
<center>
<?php
echo $paginator->first('第一頁'). ' ';
echo $paginator->prev('<< 前一頁').' ';
echo $paginator->numbers(array('separator'=>' - '));
echo ' '.$paginator->next('下一頁 >>');
echo ' '.$paginator->last("最後一頁");
?>
<br>
<?php
echo $paginator->counter(array(
'format' => '目前在第 %page% 頁 / 總共 %pages% 頁, 每頁 %current% 筆資料, 總共 %count% 筆, 目前是第 %start% 至 %end% 筆資料'
));
?>
</center>
最後得到的HTML碼會是:
<table border='1' bordercolor='#cccccc' cellspacing='0' cellpadding='5' width='80%' align='center'>
<tr><th><a href="/post/all/page:1/sort:title/direction:asc">標題</a></th>
<th><a href="/post/all/page:1/sort:created/direction:desc">建立時間</a></th>
<th>操作</th>
</tr>
<tr bgcolor="#999999>資料顯示在這邊(略)</tr></table>
<center>
<span class="current">1</span> - <span><a href="/post/all/page:2">2</a></span> - <span><a href="/post/all/page:3">3</a></span> - <span><a href="/post/all/page:4">4</a></span> <a href="/post/all/page:2">下一頁 >></a> <span><a href="/post/all/page:4">最後一頁</a></span><br>
目前在第 1 頁 / 總共 4 頁, 每頁 3 筆資料, 總共 12 筆, 目前是第 1 至 3 筆資料</center>
由上面的HTML可以發現CakePHP已經將分頁的功能,自動做好了,而且分頁的參數是以 /page:n 的方式產生。在標題的部分,也做好排序的功能,可以試著點選看看,會自動做遞增、遞減的排序。
參考資料:
官網上有關 Pagination 說明:http://book.cakephp.org/view/164/pagination
Bakery上的討論:
http://bakery.cakephp.org/articles/view/basic-pagination-overview-3
http://bakery.cakephp.org/articles/view/advanced-pagination-1-2
http://bakery.cakephp.org/articles/view/pagination-recall
原文:http://otaku.kigi.tw/2008/03/cakephp-pagination.html