スポンサードリンク

CakePHPにはすごく便利なページネーションの機能が付いてます。
一覧表示などするときに
データが多すぎると表示までに時間がかかってしまうので
なるべくなら使うようにしていきたいです。
今回はその設定方法です。
前回もページネーションの設定をしたのですが、
改めての設定方法です。
スポンサードリンク
設定は簡単
CakePHPのPaginatorヘルパーは、コントローラ内の$helpersプロパティにデフォルトで登録されているので、
登録することなく用いることが出来ます。
設定も簡単で
一覧表示をする時の場合
(例)Controller/PostsController.phpの場合
$data = $this->Model->find('all'); $this->set('data', $data);
としていたのですが、これを下記のように変えます。
(例)Controller/PostsController.phpの場合
$this->set(‘data’,$this->paginate());
これだけです。
いや、簡単!
これでページネーションを使うことができます。
デフォルトでは20件の表示に設定されています。
findメソッドでデータを取得する必要もなく
簡単にデータを取得してくれます。
このままでは20件しか表示されないので
ページ番号などを表示させます。
(例)View/Posts/index.phpの場合
<?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')); ?>
上記のように書くとページ番号とページ送りが表示されます。

次に現在のページや全ページ数を表示させます。
(例)View/Posts/index.phpの場合
<?php echo $this->Paginator->counter(array('format' => '全%count%件' )); echo $this->Paginator->counter(array('format' => '{:page}/{:pages}ページを表示')); ?>
上記のように書くと
「全50件 1/3ページを表示」と表示されます。
次に項目名の場所を次のように書きます。
(例)View/Posts/index.phpの場合
<table> <tr> <th><?php echo $this->Paginator->sort('id','ID'); ?></th> ・・・ 略
上記のように書くと項目名がクリックでき、
項目名をクリックすると並び変えができるようになります。
設定一覧
$this->Paginator->prev(‘表示文字列’,オプション配列,無効時文字列,無効時オプション配列)
『戻る』リンクを作成します。
第1引数 表示する文字列(例:『<<』『<<前へ』)
第2引数 リンクタグに付加するオプションを配列で指定します。
第3引数 リンク無効時の文字列を指定します。初期値はnull。
第4引数 リンク無効時のリンクタグに付加するオプションを指定します。
$this->Paginator->numbers(‘オプション配列’)
ページ数を指定するリンクを生成します。
オプション
model モデル名。省略するとデフォルトのモデル名が指定されます。
tag 各パーツを区切るタグ。初期値は’span’です。
before 各パーツの前に表示する文字列。初期値はnullです。
after 各パーツの後に表示する文字列。初期値はnullです。
separator 区切り文字。
first 文字列を指定することで『最初へ』リンクが可能な場合に、その文字列でリンクを生成します。数字を与えると最初からその数分のリンクを必ず表示します。
last 文字列を指定することで『最後へ』リンクが可能な場合に、その文字列でリンクを生成します。数字を与えると最初からその数分のリンクを必ず表示します。
modulus 表示するページ番号の個数を指定します。5ページ表示したい場合は4を指定します。
$this->Paginator->next(‘表示文字列’,オプション配列,無効時文字列,無効時オプション配列)
第1引数 表示する文字列(例:『<<』『<<前へ』)
第2引数 リンクタグに付加するオプションを配列で指定します。
第3引数 リンク無効時の文字列を指定します。初期値はnull。
第4引数 リンク無効時のリンクタグに付加するオプションを指定します。
$this->Paginator->sort(‘リンク文字列’,'キー’,'オプション配列’)
ソート用のリンクを作成します。
スポンサードリンク
ページネーションの設定
このままでは、初期設定のままなので
ページネーションの設定を変えます。
(例)Controller/PostsController.phpの場合
class PostsController extends AppController { //Pagenatorの設定 public $paginator = array( 'Post' => array( //ページに表示する数 'limit' => 10, //並び順 'order' => array('created' => 'desc'), )); public function index(){ $this->set('data', $this->pagenate()); } ・・・ 略
これで並び順や取得する件数を変えることができます。
Pagenatorの設定項目は他にも下記のようなものがあります。
public $paginator = array( 'モデル名' => array( 'fields' => array('フィールド1,フィールド2,フィールド3), 'conditions' => array('フィールド[演算子] => 値), 'limit' =>値, 'order' => array('フィールド' => 'asc' 又は'desc'), ));
注意すること
あまりいないでしょうが、
ページネーション使ってたときに
少しハマってことがありました。
コントローラーでモデルを指定している場合
$public $uses = array('Model1', 'Model2', ・・・);
上記のような場合でコントローラーで関連のあるモデルは
一番最初に書かないとページネーションが使えません。
使えないというよりも、一番左端に書いたモデルを
ページネーションとして使うようです。
例えばPostsController.phpにモデルを指定する場合
$public $uses = array('Model', 'Post', 'Model2', ・・・);
ではだめで
$public $uses = array('Post', 'Model', 'Model2', ・・・);
のようにしないと結果が違ったものになります。
たまたま一番左側に書かなかったので
結構ハマりました。
ご注意を!
(参考)
CakePHP2.1でページネーション(実践編その6)
スポンサードリンク