Home > PHP > CakePHP

CakePHP Archive

[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']);

[CakePHP] PagenatorのURLをGETな感じに変更したい

CakePHPのPagenationの便利さに感動したのも束の間、URL見て我が目を疑う。

http://example.com/news/page:3/sort:id/direction:asc

なにこれ!(゚Д゚lll) なんでコロン!?
世のCake使いのみなさんはこのURL気持ち悪くないんだろうか?

普通にアンバサンドとイコールで繋げてあるやつがいいんだけど…

http://example.com/news/?page=3&sort=id&direction=asc

検索しても根本的な解決方法が見つからないまま朝日を拝む始末…(今6時)

試しに後者のURLを打ち込んでみたら同じ動作になったから、
アンバサンドとイコールのURLでもソートやページングは機能するらしかった。
なら変更も出来るのじゃないかと検索していたら、変更した場合の問題についてのレスが見つかる。

Continue reading

ホーム > PHP > CakePHP

最近の投稿
最近の修正
  • そしてこの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