Home > CakePHP > [CakePHP] Pagination + Search ページ遷移時に検索条件を維持させる

[CakePHP] Pagination + Search ページ遷移時に検索条件を維持させる

CakeのPagenateについて。バージョンは1.3。

Pagenate使ってるときにconditionsを使うと、自動生成されるナビゲーションにはその条件が反映されない。
1ページ目は検索条件通り出てるのに2ページ目に進むとクリアされる現象が起きる。
その事についてはかなり既出のようだ。

検索条件を維持したままページ遷移するにはPagenateにクエリを渡さなければならない。

view/posts/index.ctp

PHP:
  1. <?php
  2. //ファイルの先頭
  3. $paginator->options(array('url' => $this->passedArgs));
  4. ?>
  5. <?php echo $this->Form->create('Post',array('name'=>'search')); ?>
  6. <?php echo $form->select('search.category', $category_label, NULL); ?>
  7. <?php echo $this->Form->end('Search');?>

$category_label はfind('list')で得たカテゴリーのidとラベルが入っているものとする。
(カテゴリーの選択は1記事あたりに1つのみってことで)
これで送信するとPostsControllerのindexメソッドで$this->data['search']として受け取る事が出来る。

controller/posts_controller.php

PHP:
  1. var $paginate = array(
  2.         'limit' => 25,
  3.         'order' => array(
  4.             'Post.id' => 'asc'
  5.         )
  6.     );
  7. function index()
  8. {
  9.     if(is_numeric($this->data['search']['category'])){
  10.         $this->paginate['conditions']['category'] = $this->data['search']['category'];
  11.         $this->passedArgs['category'] = urlencode($this->data['search']['category']);
  12.     }
  13.     if(!empty($this->passedArgs['category'])){
  14.         $this->paginate['conditions']['category']$this->passedArgs['category'];
  15.     }
  16.         $this->set('posts',$this->paginate('Post'));
  17. }

Pagenateの設定の仕方は殆どfind()と同じらしい。
$this->passedArgsに配列形式でクエリを渡せばページ移動しても検索状態が維持出来る。

渡す値は一応Sanitizeしといた方がいい気がする。

PHP:
  1. App::import('Sanitize');
  2. Sanitize::clean($this->data['search']['category']);
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

Comments:0

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://tenderfeel.xsrv.jp/php/cakephp/943/trackback/
Listed below are links to weblogs that reference
[CakePHP] Pagination + Search ページ遷移時に検索条件を維持させる from WebTecNote

Home > CakePHP > [CakePHP] Pagination + Search ページ遷移時に検索条件を維持させる

最近の投稿
最近の修正
  • そしてこのSQLはわれながらよく書いたと思う 2010-11-15
  • CSVの列っていう方がいいのかな…118項目だった 2010-11-15
  • 楽天のCSVの項目が116個もあった衝撃 2010-11-15
  • オフィスで香水臭振りまくのは迷惑だと知れ 2010-11-15
  • ぐあー フレグランステロやー 2010-11-15
  • More updates...

Powered by Twitter Tools

Tag Cloud
おすすめサーバー・他
メタ情報

Return to page top