スポンサードリンク
【注意】こちらは古い記事です。新しい記事はこちらへ
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}ページを表示'))); ?>
と書くと下記のように表示できます。
便利な機能ですね。
(参考)
CakePHP2.1でページネーション(実践編その6)
スポンサードリンク