CakePHP

CakePHPでページネーションのキャッシュ

2014年7月7日

CakePHPにはPaginatorというページネーション用のヘルパーが用意されています。
使い方は簡単で、例えばコントローラにて次のように呼び出します。

$this->paginate	= array(
'conditions'    => $cond,
'order'			=> array('id'=>'DESC'),
);
$result	= $this->paginate($tb_name);

ビューでは次のようにして出力することができます。

<?php echo($this->Paginator->numbers()); ?>

ここではページネーションと、一覧部分もキャッシュします。
それと、全ページをキャッシュするのもなんですので、一番PVが多そうな1ページ目だけキャッシュします。
キャッシュはCacheヘルパーを使います。ページネーション含めたコードは下記になります。

// 現在のURLを取得
$url	= $this->params->url;
// 1ページ目であればURLをキーにして、それ以外はfalseに設定
$key	= preg_match("/page:(\d)+/", $url, $key) ? false : $url;
// ビューに$keyを渡します
$this->set("key", $key);
// キャッシュがあればキャッシュが返す値をビューに設定
if ( $key && $result = Cache::read($key) ){ 
$this->set('items', $result);
return;
}
// ページネーション
$this->paginate	= array(
'conditions'    => $cond,
'order'			=> array('id'=>'DESC'),
);
$result	= $this->paginate($tb_name);
// キャッシュの記録
Cache::write($key, $result);

ビューは次のようになります。まずページネーション部分です。

<?
// キャッシュがある場合はキャッシュのページネーションを出力
if ( isset($key) && $key != null && $p	= Cache::read($key."paging")) {
echo($p);
} else {
// キャッシュがない場合はPaginatorを使ってページネーションを出力
php echo($this->Paginator->numbers()); 
if ( isset($key) ) Cache::write($key."paging", $p." ");
}
?>

一覧は次のようになります。

<?php if (isset($items) && count($items)): ?>
<ul>
<?php foreach ($items as $v): ?>
<li><?php eh($v['...']['...']) ?></li>
<?php endforeach; ?>
</ul>

Comment

コメントを残す

メールアドレスが公開されることはありません。

関連記事

リズムファクトリーはホームページの制作会社です。
ホームページ制作に関するご要望・ご相談はこちらからどうぞ。

株式会社リズムファクトリーでは現在、下記の職種について人材募集を行っております。
求人をクリックすると「求人情報サイトFind Job!」の求人詳細画面が開きますので、こちらからご応募下さい。

提供 : Webな人の求人情報サイト Find Job!