【CakePHP2】テーマ別にViewキャッシュを取る
example.comにアクセスがあった場合、スマホ・タブレットにはs_home.phpのViewキャッシュを、その他の端末にはhome.phpのViewキャッシュを表示するようにします。
- PHP
- 5.6
- CakePHP
- 2.8
ユーザーエージェントでテーマを変更する
public function beforeFilter()
{
parent::beforeFilter();
// テーマの設定
if (preg_match('/iPhone|Android|iPad|iPod/', $_SERVER['HTTP_USER_AGENT'])) {
$this->theme = 'SmartPhone';
}
}
Viewキャッシュファイル名にプレフィックスをつける
// キャッシュの有効化
Configure::write('Cache', array(
'disable' => false,
'check' => true
)
);
// スマホ・タブレットからのアクセスにはプレフィックスをつける
if (preg_match('/iPhone|Android|iPad|iPod/',$_SERVER['HTTP_USER_AGENT'])) {
Configure::write('Cache.viewPrefix', 's');
}
各コントローラーのキャッシュ設定
public $helpers = array('Cache');
public $cacheAction = 3600;
まとめ
以上の設定で/tmp/cache/viewsへテーマ別のキャッシュが出力されるようになりました。
私の場合はこれで大丈夫でしたが、こちらの記事テーマ別にキャッシュする cakephp2.xでもいけるようです。
あとはCookieに現テーマを書き込み、振り分けの条件を変えれば、ユーザーによってテーマの選択ができるようにもなります。