Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

cakephp1.2で、検索条件を絞り込んだ場合のページング

多分コレでいいんジャマイカ。

検索条件をPOSTで送って絞り込んでいる場合(僕の場合は日付のFromTo)、ページングで次へ次へとクリックしても検索条件が引き継がれなかった。色々考えたが、手っ取り早くSessionに入れて引き回せばいいやという考えに落ち着いた。管理側の画面だからそんなに使う人もいないし。

で、その時に、「ページ送り」をしているのか「新たな検索条件で検索しているのか」を判別しないと意味が無いことに気が付いた。

cakephpはページングしていると/controller/method/param/page:2っていうURIで「page」っていうパラメーターが飛んでくるので、pageってパラメーターが飛んでくればそれはページングナウってことだなということにした。「page」っていうパラメーターは、Controllerの$this->params['named']['page']で取得できる。

つーわけで、

<?php
if(isset($this->params['named']['page']) == false) {
    //再検索と判断し検索条件を再セット
    $this->Session->write('condition',$condition);		
}
    //それを元に検索。ページングなら読み取って入れるだけ
    $sc = $this->Session->read('condition');	
    $result = $this->paginate('MODEL', $sc);	

でおk。

楽天とかあーゆー大きなサイトは、何千件ものページングをどうやっているんだろう。カテゴリだけ絞って吐き出しとかならそのIDだけ持ちまわせばいいんだろうけど。色々考えちゃいますね。