test
CakePHP Note
ページネーション
検索結果を複数のページにわたって表示させたいときは、ページネーション機能を使います。ページ送り、ページングなどと呼ばれる機能です。コントローラーのpaginateメソッドとビューのpaginatorヘルパーを使います。
コントローラ
モデルにfindメソッドを使う代わりに、コントローラのpaginateメソッドを使います。paginateメソッドでは検索対象のモデル、検索条件等を引数で指定します。
PostsControllerの例。
$posts = $this->paginate('Post');
// $this->paginate('Post',$conditions,$whitelist);検索条件を指定する場合
$this->set('posts', $posts);
$paginate属性にあらかじめページネーションに必要なパラメータをセットしておく事もできます。
var $paginate = array('limit' => 25, 'order' => array('Post.created' => 'desc'),'group'=>array('Post.id'))
ビュー
paginatorヘルパーを使用してページネーションに関する情報やナビゲーションのためのリンクを表示させます。
counter
現在何ページ目かといった情報をまとめて表示するにはcounterメソッドを使います。
echo $paginator->counter(array(
'format' => __('%page% / %pages% ページ, 全%count%件中%current%件, ( %start% から %end%)', true)
));
prev, next,numbers
次のページや前のページへのリンクを作成するにはprevメソッドやnextメソッドを使います。numbersメソッドは1,2,3,,といった各ページへのリンクを作成します。
<div class="paging">
<?php echo $paginator->prev('<< 前のページへ');?>
<?php echo $paginator->numbers();?>
<?php echo $paginator->next('次のページへ >>');?>
</div>
prevメソッド/nextメソッドのオプション
title, option, disabledTitle, disabledOptionsなどを指定できます。
disabledTitleまたはdisabledOptionsを指定すると、前あるは次のページがなくても「 前のページへ」のようなタイトルが表示されます。
- title(タイトル「例:次のページ」)
- option(オプション「class/tag,,など」)
- disabledTitle(リンク無効時のタイトル「例:この先のページはありません」)
- disabledOptions(リンク無効時のオプション「class/tag,,など」)
<div class="paging">
<?php echo $paginator->prev('<< 前のページへ', array(), '前はありません', array('class'=>'disabled','tag'=>'span'));?>
<?php echo $paginator->numbers();?>
<?php echo $paginator->next('次のページへ >>', array(), '次はありません', array('class'=>'disabled','tag'=>'span'));?>
</div>
numbersメソッドのオプション
separator, modulus,urlなどを指定できます。
- separator(区切り文字)
- modulus(リンクの数)
sort
並び順を変更するためのリンクも作成できます。
echo $paginator->sort('Title', 'key');
'Title'という文字でkey順にソートするリンクを出力します。
options
format, separator, urlなど各オプションのデフォルト値を設定できます。
paginatorが生成するリンクのURLに検索用のキーワードを含める例。この後にpaginatorによって出力されるリンクに有効。
echo $paginator->options(array('url'=>"keyword:".urlencode($keyword)));
