スポンサードリンク

CakePHP
CakePHP

【注意】こちらは古い記事です。新しい記事はこちらへ

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)

スポンサードリンク