2011年1月21日金曜日

【CakePHPでpagination機能を実装】

なんか卒論めんどくさい病になってきたのでそんなときはlcc-hikaku.jpの機能を追加するべく開発を進める。
目の前にめんどくさいものがあると、それとは別のプログラミングをやろうという気が起こるのはなぜだろうか・・・。

さて、pagination機能ですが、コピペがほとんどだった自分には

http://book.cakephp.org/ja/view/164/%E3%83%9A%E3%83%BC%E3%82%B8%E4%BB%98%E3%81%91-Pagination

でもちょっと難しい。できれば一つ一つ解説して欲しい。
ググったけどそんなのない→自分でやるしかないわ。
というわけでいろいろ試した結果できたのでそのソースについて

【controller】

 var $paginate = array(

'limit' => 8, //出力する項目数
'order' => array(
'hogemodel.regtime' => 'desc' //モデル名.テーブル名
)
);


をfunctionの外(元class?)に定義。
limitは出力数
orderはデータのソート方法。自分の場合は、時間でソートした。desc順。

使いたいactionの中で

 $this->set('hogemodel',$this->paginate('viewに受け渡す変数名'));

上記がポイント。これでfindallの要にデータを渡してくれる。必要なデータを指定したい場合は、 var $paginateに引数で指定する。詳しくは参考URL参照。

【view】

受け取った値を

foreach($受け渡された変数名 as $lcc):

echo $lcc['hogemodel']['title']),
echo '<br>';

endforeach;

のようにfindallで取得したデータを扱うのと同じように扱える。

末尾に


//paginationの末尾
  echo '<br>';
  echo $paginator->prev('前へ ');
  echo $paginator->numbers();
  echo $paginator->next(' 次へ');

を書けばpaginationの出来上がり。
イメージがわかないと思うので

実際どうなってるの?っていうのは

http://lcc-hikaku.jp 

のNEWSの一番下にpaginationができているのでそれで確認してみてください。

lcc-hikaku.jpの今後としては、もっとコンテンツを充実させていく予定です。
さらに時間ができたらHTML5とCSS3使ってレイアウトとかその辺りをいじろうと思ってます。最終的にはAdobeとかの勉強もしてデザインもできるようになりたいです。

さて、卒論に戻ります。

参考にしたサイト
http://gihyo.jp/dev/serial/01/cakephp/0015
http://www.cpa-lab.com/tech/Paginator%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%80%82CakePHP1.2#fk53n3
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=573&forum=9

0 件のコメント:

コメントを投稿