
【注意】こちらは古い記事です。新しい記事はこちらへ
CakePHPでシステム製作もすでに1か月が経ちました。
う~ん、思っていたよりも早くできてきました。
フレームワークってすごいって実感しているところです。
今回は、扱うデータが増えてくると
一覧表示が見にくくなるので
ページネーションを実装しました。
ページネーションの作り方
CakePHPには元々ページネーションの機能がついています。
便利ですね~
では、実装の仕方です。
Controllerに記述
通常、一覧を取得するときに
public function index(){
$data = $this->Model->find('all');
$this->set('post', $data);
}
としていた箇所を下記のように変えるだけです。
public function index(){
$this->set('post',$this->paginate());
}
これだけです。簡単ですね。
こうすると20件のデータのみ取得できます。
データの件数を指定したり
最初に取得するデータの並び順を指定する場合は
コントローラーのクラス内に
class PostsController extends AppController {
//Paginationの設定
public $paginate = array(
'Post' => array( //モデルの指定
'limit' =>20, //表示できるデータ数の設定
'order' => array('id' => 'desc') //データを降順に並べる
)
);
public function index(){
$this->set('post',$this->paginate());
}
}
という風にしていします。
このままでは、21件目~のデータが見れないので
Viewファイルに追記します。
Viewファイルに記述
まず、ページングさせたい箇所に以下のものを書きます。
<?php
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'));
?>
すると下記のようにページネーションが出てきます。

ページ移動するとURLも自動的に変わってくれています。
また、一覧表示の場合は列タイトル(カラム名を使うかな?)も付けると思いますが、
タイトル部分に
<?php echo $this->Paginator->sort('カラム名','表示名');?>
と書くとカラムで並べ替えができます。
また、全件数の何ページを表示かを表示させるには
<?php echo $this->Paginator->counter(array('format' => '全%count%件' )); ?>
<?php echo $this->Paginator->counter(array('format' => __('{:page}/{:pages}ページを表示'))); ?>
と書くと下記のように表示できます。

便利な機能ですね。
