サイドメニューなど、エレメントの部分だけキャッシュしたかったので、
マニュアルの3.9.3.2 エレメントをキャッシュするを見て、実装したのですが、
コントローラ側からCache::read();としても反応なし。
・・・?と思いながらview.phpを眺めていると、以下の記述が。。。
PHP:
- if ($expires) {
- $cacheFile = ‘element_’ . $key . ‘_’ . $plugin . Inflector::slug($name);
- $cache = cache(‘views’ . DS . $cacheFile, null, $expires);
- return $cache;
- }
- }
あれ、cache();って1.1のやつだから非推奨のはずじゃぁ。。。
ってことで、cakephp1.2流のelementキャッシュを考えてみた。
の代わりに以下を挿入
PHP:
- <?php
- if(($element = Cache::read(‘left_menu’, ‘element’)) === false){
- $element = $this->element(‘left_menu’);
- Cache::write(‘left_menu’, $element, ‘element’);
- }
- echo $element;
- ?>
●コントローラ側
beforeFilterなどでエレメントキャッシュを定義し、
キャッシュが存在しない場合に限り、クエリを発行する。
PHP:
- ‘engine’ => ‘File’,
- ‘duration’=> ‘+5 min’,
- ‘path’ => CACHE . ‘views’ . DS,
- ‘prefix’ => ‘element_’
- );
- Cache::config(‘element’, $config);</code>
- if( Cache::read(‘left_menu’, ‘element’) === false ){
- $areas = $this
>Area>find(‘menu’)); - $categories = $this
>Category>find(‘menu’)); - }
これで劇早&1.2流のキャッシュができましたー!