[CakePHP2] テーマ別にViewキャッシュを取る

example.comにアクセスがあった場合、スマホ・タブレットにはs_home.phpのViewキャッシュを、その他の端末にはhome.phpのViewキャッシュを表示するようにします。

環境
  • PHP5.6
  • CakePHP2.8

ユーザーエージェントでテーマを変更する

AppController.php
public function beforeFilter()
{
    parent::beforeFilter();

    // テーマの設定
    if (preg_match('/iPhone|Android|iPad|iPod/', $_SERVER['HTTP_USER_AGENT'])) {
        $this->theme = 'SmartPhone';
    }
}

Viewキャッシュファイル名にプレフィックスをつける

core.php
// キャッシュの有効化
Configure::write('Cache', array(
  'disable' => false,
  'check' => true
  )
);

// スマホ・タブレットからのアクセスにはプレフィックスをつける
if (preg_match('/iPhone|Android|iPad|iPod/',$_SERVER['HTTP_USER_AGENT'])) {
    Configure::write('Cache.viewPrefix', 's');
}

各コントローラーのキャッシュ設定

HogeController
public $helpers = array('Cache');
public $cacheAction = 3600;

まとめ

以上の設定で/tmp/cache/viewsへテーマ別のキャッシュが出力されるようになりました。
私の場合はこれで大丈夫でしたが、こちらの記事テーマ別にキャッシュする cakephp2.xでもいけるようです。

あとはCookieに現テーマを書き込み、振り分けの条件を変えれば、ユーザーによってテーマの選択ができるようにもなります。

CONTENTS
  1. ユーザーエージェントでテーマを変更する
  2. Viewキャッシュファイル名にプレフィックスをつける
  3. 各コントローラーのキャッシュ設定
  4. まとめ