pagenateヘルパーでページングは非常に簡単に実装できますが、検索条件を付けようとするといろいろ問題があります。
クッキーで引き継ぎ、URLで引き継ぎなど色々な方法がありますが、ここではsessionを利用した方法を実装します。
AppController.php に以下のメソッドを追加
/** * pagenater の検索条件引引き継ぎ * @param $keyword 検索条件に付ける名称。 * 指定しない場合は自動的に($keywords+コントローラー名+アクション名+adminかどうか) がセッションキーになる * @return 引き継がれた検索条件 */ public function takeoverPagenateConditions($keyword=''){ //セッションキーの確定 if(empty($keyword)){ $sskey = $this->params['controller'].$this->params['action'].$this->params['admin']; }else{ $sskey = $keyword; } //POSTされていたらキーを更新する if($this->request->is('post')){ $this->Session->Write($sskey,$this->request->data); return $this->request->data; } //ソートのリンクから飛んできたらセッションから引き継ぎ //$this->params['named']に何か入っていたらページ遷移orソートとみなす if(!empty($this->params['named']) AND $this->Session->check($sskey)){ return $this->Session->read($sskey); } return array(); }
コントローラーのアクションの中で$this->data = $this->takeoverPagenateConditions();をコールして$this->dataの中身で検索処理を行ってもらえればOKです。
$keywordについてですが、同一アクションで2つ使いたいとか、他のアクションで共通で使いたい場合以外は指定しなくてもOK。
viewでのポイントは、$this->Form->create()で、POSTするURLにページ番号やソートなどのパラメータが入らないようにURLを指定してください。