CakePHP

CakePHP1.2 ページ処理(ページネーション)

1.2に追加されたページ処理の機能がベータ版になって改善されているようなので使ってみたところ、結構便利なのが分かった。使い方の説明は、BakeryでRob Conner氏が「1.2 ページネーション概説」でサンプルを掲載してくれている。迷ったのは、ページネーションに絞り込み検索をどのように追加しようかな?、と言うところ。検索キーの受け渡しはGETを利用するとして、URLにどのように組み込めばいいのか?

実 際にページリンクを表示したところ、リンク表示が「/controller/index/?page:2」とか「/controller/index /?page:1/sort:name/direction:asc」のように表示された。これがヒントになった。もしかすると「/pref:山梨」のよ うに追加できるのではないかと思った訳だ。

必死に検索するとCakePHPのGoogleグループで「カテゴリで項目をフィルタする」がMariano Iglesias氏により投稿されていた。良く分からなかったが、この記事を参考にカット&トライしたところ、記事前半のビューでの指定はうまくいった(コントローラの方は?)。

結 論から言うと、ビューで利用する「PaginatorHelper」のメソッドを利用する際、例えば「numbers ($options=array())」のようにオプションのパラメータをセットすることができる。このパラメータで「array(‘url’=> array(‘key’=>’word’))」のようにセットすれば、リンクのURLに「/key:word」を追加してくれる。他のオプション指 定はaタグの属性指定になるようだ(余談)。

<?php echo $paginator->numbers(array('url'=>array('key'=>'word'))); ?>

さてコントローラのアクションプログラム内で、URLに指定された変数を取り込む方法である。「var_dump($this->params)」を実行してみるとわかるが、

$keyword = $this->params['named']['key'];

とすればよい。

$this->paginate['conditions'] = array('key'=>'like %' . $keyword . '%');
$this->set('records', $this->paginate());
$this->set('parameters', array('key'=>htmlspecialchars($keyword)));

で絞り込み検索した結果と検索キーをビューに渡すことができる。

最初の検索キーの取り込みはformタグを利用して、「$this->params[‘form’][‘key’]」で取り込めるように指定するもよし、「$this->data[‘Model’][‘key’]」の形式にするのもいいだろう。

ところで「PaginatorHelper」は、コントローラクラスの「$helpers」メンバ変数の配列に追加しなくてもデフォルトで利用できた。