全情報が見れる管理画面作成してみた
全件表示できて、なおかつedit・add・deleteができる管理画面を作成します。
最初にbakeコマンドで作成されたindex.ctpが管理画面のようなものですが、
admin権限を設定してないので、admin_をコントローラー名とビューの前につけます
全件表示すると多い場合は、paginateをしようして
表示する件数を指定します
function admin_kanri(){$this->paginate['limit'] = 20;
$this->set('shop',$this->paginate());}
ビュー側に記述するもの
paginater sample
http://www.spokslog.com/book/paginator_tests/preview/これで20件ずつ表示できます
検索機能を付けたい場合は、paginateでは、ページを切り替えたときに値を保持してくれないので、
$paginator->options(array('url'=>array('search'=>$search)));
や
$this->passedArgs
を使用します
簡単に言うと、URLで値をやり取りします。
paginateでの値の受け渡し
・まず、ビューで検索のフォームを作成します
<?php
echo $form->create('Shop', array('action' => 'kanri'));
echo $form->input('shop1',array('label' => false,'default' => $search));
echo $form->end('saerch');
?>submitされると、inputで記述したデータがactionで指定された場所に渡されます
$thisで入っているデータが確認できますpaginateでページを進めると、そのデータが消えてしまうので、URLに残して渡せるようにします。
★流れ
1、submitされてactionに飛んでいく
action内↓
if( !empty($this->data) ){
$shop1 = $this->params['data']['Shop']['shop1'];
}else if( !empty($this->passedArgs)) {
$shop1 = $this->passedArgs['search'];
}else{
$shop1="";
}
$this->set('search',$shop1);$this->paginate=array(
'conditions' =>array("Shop.shop1 LIKE" => "%".$shop1."%"),
'limit' => '20'
);
$this->set('shop',$this->paginate());
2、postされたデータは$this->dataにはいっているので、空でない場合は
$shop1 = $this->params['data']['Shop']['shop1'];
が実行される
3、$this->set('search',$shop1);でビューに検索する単語が渡される
4、ビューに記述された
$paginator->options(array('url'=>array('search'=>$search)));
で、URLに search:検索する単語 という形で追加される。
この値は$this->passedArgs['search']で取得できます。
5、paginateでページ遷移すると、またアクションが実行されて、今度はpostされていないので、URLから値を取得します
$shop1 = $this->passedArgs['search'];が実行されます
6、$this->set('search',$shop1);がセットされて、、、
って言うのを繰り返します。
参考サイト
・http://d.hatena.ne.jp/cakephper/20080907/1220796088
・http://74.125.153.132/search?q=cache:WJpWcQglqw8J:d.hatena.ne.jp/seto-san/20090813+passedArgs%E3%80%80%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89&cd=5&hl=ja&ct=clnk&gl=jp&client=firefox-a
そのほかの方法として、セッションを利用する方法もあるようです!
memo
paginateで条件文にLIKE,ORを指定する方法
http://phptips.seesaa.net/article/104597687.html