$paginator->optionsのお話

まっちー

まっちー

検索条件や一覧の表示件数を引き継いでページング処理をしたいときって、結構あると思います。

例えば、「テスト」という検索ワードを保持してページ遷移したいとする。

<?php $paginator->options('url' => array('word' => 'テスト')) ?>

viewファイルに上記の一文を書いておくと、ページ遷移したときに配列の中身が飛んでくるので、それを使えば良い。確か飛んできた値は$this->params[‘named’]だか何だかに入ってるはず。なので上のワードを保持して2ページ目に遷移すると

[params] => array(

 € € € € € € € € € € € € € € € € € € [named] => array(

 € € € € € € € € € € € € € € € € € € € € € € € € € [page] => 2

 € € € € € € € € € € € € € € € € € € € € € € € € € [word] => テスト

 € € € € € € € € € € € € € € € € € € )

)

配列の中身はこうなるので、これを使えば良い。

$word = $this->params['named']['word'];

$conditions['OR'] = array("User.name €LIKE '%$word%', User.profile LIKE '%$word%'");

$this->set('data', $this->paginate('User', $conditions));

ユーザーテーブルに名前とプロフィールというカラムがあったとして、そこからテストという文字列が入っているデータをOR検索で抽出すると、たぶんこんな感じのソースになると思う。これなら他のページに移動しても検索条件を引き継いだまま、常にテストという単語が入っているデータだけを取ってきてくれる。

・・・はずなんですけど。

いや、はずっていうか、確かにそうなるんだけど、この書き方だとローカルでは動くのにサーバーにあげたりすると正常に機能しなくなるケースがあるらしくって・・・まさに現在の僕がその状態におかれているんですけれども、まさか$paginator->optionsに問題があるなんて思わなくて、解決するまでに無駄に時間を消費したさ。PHP4だと上手く動かないとかあるのかな?

何が問題だったかというと、上記の例でいうなら、ちゃんと$this->params[‘named’]の中に値は入っているのに、ページリンクにそれが反映されていないというもの。だから他のページに遷移すると、当然のように検索条件がリセットされてしまう。

なぜそうなるのかという原因は、今現在も分からないままなんだけど、とりあえず解決方法としては、ページリンクを表示させている方に、つまり$paginator->numbersの方に直接条件をつっこんでやればいいみたい。

<?php echo $paginator->numbers(array('url' => array('word' => 'テスト'))) ?>

previewとかnextについても同様

<?php echo $paginator->prev('<<',array('url' => array('word' => 'テスト'))) ?>

<?php echo $paginator->next('>>',array('url' => array('word' => 'テスト'))) ?>

時間があればどうしてoptionsの方だと上手くいかないのかも調べようと思ってるけど、まあたぶん調べないままになってしまうんじゃないかしら・・・。

LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。

Webサイト制作の実績・料金を見る

この記事のシェア数

プログラマのまっちーです。酒が大好きです。ある一定量のお酒を飲むと壊れたレディオモードに入り、同じことを繰り返す癖があります。宜しくお願いいたします。

このメンバーの記事をもっと読む
デザイン力×グローバルな開発体制でDXをトータル支援
お問い合わせ 会社概要DL