cakePHPでページング(Pear_Pager)

2007/07/19 | cakePHP

久しぶりにcakePHPで遊んでいる(もちろん仕事だが)。
「とある業態のウェブサイトでは、必要とされる機能が決まりきっているから、機能を一式作って格安にすれば絶対売れる」とそそのかされたから。mojaviで構築しようか迷ったが、PHP4と5両対応にしたいのでcakePHPにした。
基本機能はなんといってもbake.php!。いやぁ、もうbakeサマ様さま。基本部分をbakeしてしまえば、なんとまぁ早いこと!。入力操作は基本的にウェブサイト管理者しかやらないので、確認画面もなしにした(JavaScriptのアラートくらいは出すかもしれない)。
今回ページング処理を入れたのだが、decorate.phpを使用しなかったのはコードが煩雑になりすぎるから。decorateするとindex()の行数が300行近くになり、これはもう見にくい!。検索機能もとりあえずいらないのでbake.php+Pagerでいくことにした。
これがまぁ簡単。以下が出来上がったスクリプト。

function index($page=null) {
  $perPage=20;
  
  if(!is_numeric($page)){$page=1;}
  $pagerParam=array();
  $pagerParam[‘totalItems’]=$this->[モデル名]->findCount();
  $pagerParam[‘perPage’]=$perPage;
  $pagerParam[‘delta’]=5;
  $pagerParam[‘mode’]=’sliding';
  $pagerParam[‘currentPage’]=$page;
  $pagerParam[‘append’]=false;
  $pagerParam[‘path’]=FULL_BASE_URL . strip_plugin($this->base, $this->plugin) . ‘/[コントローラー名]/index/';
  $pagerParam[‘fileName’]=”%d”;
  $pager=Pager::factory($pagerParam);
  $thisPage=$pager->getCurrentPageID();
  $linkTags=$pager->getLinks();
  $this->set(‘paging’, $linkTags[‘all’]);
  
  $this->[モデル名]->recursive = 0;
  $this->set(‘data’, $this->[モデル名]->findAll(”,”,’id DESC’,$perPage,$thisPage));
}

要点はこんな感じ。
・$pageでページ番号を受け取る。
・findCount()で総レコード数を取得。
・pagerに与えるパラメータでpathとfileNameを与える。
・pathの呼び出し方。

このコード、cakePHPやる人には絶対おすすめ(自画自賛だけどそのくらいスマート!)。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net