Cake1.2でページング
前回はController側の記述をしたので、今回はview側index.ctpファイルを見ていく。
counter
bakeしたファイルindex.ctpを眺めていくと最初に出てくるのはcounterメソッド。
初期状態の表示方法
echo $paginator->counter(array( 'format' => __('Page %page% of %pages%, showing %current% records out of %count% total, starting on record %start%, ending on %end%', true) ));
日本語に直した場合はこんな感じ。
echo $paginator->counter(array( 'format' => __('現%page%ページ/全%pages%ページ、%current%件/全%count%件、%start%〜%end%件を表示', true) ));
全部を表示すると長いので、実際に使うのはこんな感じ。
echo $paginator->counter(array( 'format' => __('%start%〜%end%件/全%count%件', true) ));
sort
次に出てくるのはテーブルヘッダのsortメソッド。
<th><?php echo $paginator->sort('id');?></th> <th><?php echo $paginator->sort('name');?></th>
見出し(列名)クリックでソート順変更になるリンクを出力してくれます。
カラム名と異なる見出しを使いたい場合は、見出し用の文字列を第1引数に、ソートに使用するカラム名を第2引数にします。
<th><?php echo $paginator->sort('番号','id');?></th> <th><?php echo $paginator->sort('名前','name');?></th>
paging
最後は表組みの下部にあるページングエリア。ここは、prev、numbers、nextメソッドで構成されます。
<div class="paging"> <?php echo $paginator->prev('<< '.__('previous', true), array(), null, array('class'=>'disabled'));?> <?php echo $paginator->numbers();?> <?php echo $paginator->next(__('next', true).' >>', array(), null, array('class'=>'disabled'));?> </div>
まず日本語で書き直してみるとこんな感じ。
<div class="paging"> <?php echo $paginator->prev('<< '.__('前', true), array(), null, array('class'=>'disabled'));?> <?php echo $paginator->numbers();?> <?php echo $paginator->next(__('次', true).' >>', array(), null, array('class'=>'disabled'));?> </div>
前や次のページがない場合にprevやnext表示をしない場合は、各メソッドの第3引数に空白を渡す。
<div class="paging"> <?php echo $paginator->prev('<< '.__('previous', true), array(), ' ', array('class'=>'disabled'));?> <?php echo $paginator->numbers();?> <?php echo $paginator->next(__('next', true).' >>', array(), ' ', array('class'=>'disabled'));?> </div>
$paginator->numbersの引数で分かったのは、modulusとseparator。
<?php echo $paginator->numbers(array('separator'=>',','modulus'=>'4'));?>
この例では数字の区切り文字に','を使い、表示ページを除く4ページ分(つまり最大5ページ分の数字)を並べるということになります。
表示例 << previous 1,2,3,4,5 next >>
デフォルトでは下記のように区切り文字'|'で8ページ分(表示ページを含めると9ページ分)を指定したのと同じ表示になります。
<?php echo $paginator->numbers(array('separator'=>'|','modulus'=>'8'));?>