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を指定してください。

