- 2010-10-11 (月) 1:34
- CakePHP
CakeのPagenateについて。バージョンは1.3。
Pagenate使ってるときにconditionsを使うと、自動生成されるナビゲーションにはその条件が反映されない。
1ページ目は検索条件通り出てるのに2ページ目に進むとクリアされる現象が起きる。
その事についてはかなり既出のようだ。
検索条件を維持したままページ遷移するにはPagenateにクエリを渡さなければならない。
view/posts/index.ctp
$category_label はfind('list')で得たカテゴリーのidとラベルが入っているものとする。
(カテゴリーの選択は1記事あたりに1つのみってことで)
これで送信するとPostsControllerのindexメソッドで$this->data['search']として受け取る事が出来る。
controller/posts_controller.php
-
'limit' => 25,
-
'Post.id' => 'asc'
-
)
-
);
-
function index()
-
{
-
$this->paginate['conditions']['category'] = $this->data['search']['category'];
-
}
-
$this->paginate['conditions']['category'] = $this->passedArgs['category'];
-
}
-
$this->set('posts',$this->paginate('Post'));
-
}
Pagenateの設定の仕方は殆どfind()と同じらしい。
$this->passedArgsに配列形式でクエリを渡せばページ移動しても検索状態が維持出来る。
渡す値は一応Sanitizeしといた方がいい気がする。
-
App::import('Sanitize');
-
Sanitize::clean($this->data['search']['category']);