CakePHP Paginatorでページ分けと表示順を指定
記事の表示件数と表示する順番を指定する
CakePHPで記事を投稿するアプリを作っていて、表示するページを分けたいと思いPaginatorでページ分けをしたので手順等を記載します。
1.ページを分ける
まずはページごとに分けていきます。 Cntrollerを編集していきます。
表示件数を5件、表示順は記事の降順で表示する
class ArticlesController extends AppController { public $paginate = array( //表示件数を5件に指定する 'limit' => 5, //表示順番をArticleのidの降順 'order' => array('Article.id' => 'desc') );
これでページを分けて表示できます。
2.ページ遷移をさせる
続いてビュー側でページ遷移の選択肢を作ります。
・前のページ ・次のページ ・ページ数を選ぶ ・最初のページ ・最後のページ
これらを実装します
<?php //最初のページへ echo $this->Paginator->first('最初のページへ' , array()); //一つ前のページへ echo $this->Paginator->prev('戻る', array(), null, array('class' => 'prev disabled')); //ページ数を選択する echo $this->Paginator->numbers(array('separator' => '')); //一つ次のページへ echo $this->Paginator->next('進む', array(), null, array('class' => 'next disabled')); //最後のページへ echo $this->Paginator->last('最後のページへ', array()); ?>
これでページ遷移が出来るのですが、一つ注意点があります。
3.デフォルトを参照していないか
私が引っかかったところなのですが、Controllerで使うPaginatorがlib/Cake/Controller/Component にある「PaginatorComponent.php」を参照していていくらlimitを指定しても結果が反映されないという状況に陥りました。
まず原因としてはControllerで$componentsでPaginatorを指定していることになります。
public $components = array( 'Paginator', 'Session', 'Flash' );
解決策としては簡単で'Paginator'を削除すればオーケーです。
それでは