2009/08/26 by マッチー
$paginator->optionsのお話
検索条件や一覧の表示件数を引き継いでページング処理をしたいときって、結構あると思います。
例えば、「テスト」という検索ワードを保持してページ遷移したいとする。
viewファイルに上記の一文を書いておくと、ページ遷移したときに配列の中身が飛んでくるので、それを使えば良い。確か飛んできた値は$this->params['named']だか何だかに入ってるはず。なので上のワードを保持して2ページ目に遷移すると
配列の中身はこうなるので、これを使えば良い。
ユーザーテーブルに名前とプロフィールというカラムがあったとして、そこからテストという文字列が入っているデータをOR検索で抽出すると、たぶんこんな感じのソースになると思う。これなら他のページに移動しても検索条件を引き継いだまま、常にテストという単語が入っているデータだけを取ってきてくれる。
・・・はずなんですけど。
いや、はずっていうか、確かにそうなるんだけど、この書き方だとローカルでは動くのにサーバーにあげたりすると正常に機能しなくなるケースがあるらしくって・・・まさに現在の僕がその状態におかれているんですけれども、まさか$paginator->optionsに問題があるなんて思わなくて、解決するまでに無駄に時間を消費したさ。PHP4だと上手く動かないとかあるのかな?
何が問題だったかというと、上記の例でいうなら、ちゃんと$this->params['named']の中に値は入っているのに、ページリンクにそれが反映されていないというもの。だから他のページに遷移すると、当然のように検索条件がリセットされてしまう。
なぜそうなるのかという原因は、今現在も分からないままなんだけど、とりあえず解決方法としては、ページリンクを表示させている方に、つまり$paginator->numbersの方に直接条件をつっこんでやればいいみたい。
時間があればどうしてoptionsの方だと上手くいかないのかも調べようと思ってるけど、まあたぶん調べないままになってしまうんじゃないかしら・・・。









