Home > CakePHP | PHP > CakePHPでSmartyのキャッシュを利用する

CakePHPでSmartyのキャッシュを利用する

  • Posted by: エガシラリュウジ
  • 2008年5月29日 11:40
  • CakePHP | PHP

公開されている Smarty View class などで、そのままSmartyのキャッシュ機能を利用しようとすると、ページを移動しても内容が切り替わらないという問題が発生する。

これは、CakePHPが、layoutテンプレートから、対象のURLに対応したviewテンプレートを呼び出す仕組みになっているのが原因だ。

CakePHPでは、最終出力されるのは、layoutテンプレートの為、layoutテンプレートにSmartyのキャッシュが適用された場合、対象URLのviewが呼び出されなくなってしまう。
その結果、ページ遷移しても同じページが表示されてしまうようだ。

ページごとにlayoutファイルを作る?!こりゃやれんわ。
CakePHPはせっかくキャッシュ機能があるのに表示速度を落としてまでSmartyは利用する意味って。。
と思ってたらこれを回避する方法もちゃんとあった。

パラメータごとにキャッシュ・データを切り替える
Smartyでは、display()や、fetch()などを利用する際に第二引数に、任意の値を与えると、その値ごとのキャッシュが生成される。
これを利用して、第二引数に、各ページを一意に特定するパラーメータを引き渡せば、そのパラメーターごとにlayoutのキャッシュが生成できる。

Smarty View class では、_render メソッドで、smarty の fetch メソッドを利用して出力データを生成しているので、ここを訂正する。

$out = $this->Smarty->fetch($___viewFn,md5(serialize($_GET)));

ここでは、$_GETをシリアライズした値をさらにハッシュに変換した値を「ページを特定する一意の値」としている。
こうすれば、URLを$_GETに変換しているCakePHPでは、URLごとに別のlayout用のキャッシュが生成されるので、キャッシュ機能を維持しつつ、ページ遷移を正常に動作させる事ができる。

ただ、この方法だとハンパない数のキャッシュファイルができあがってしまうので、ディスク容量には注意が必要。

Comments:0

コメントフォーム

コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。

Trackbacks:0

TrackBack URL for this entry
http://blog.non-style.com/mt/mt-tb.cgi/46
Listed below are links to weblogs that reference
CakePHPでSmartyのキャッシュを利用する from Webプログラマの苦悩

Home > CakePHP | PHP > CakePHPでSmartyのキャッシュを利用する

Links
Search
Feeds
Tag Cloud

Return to page top