ダイナミックコンテンツ

fragment cachingpage caching を使う際、しばしば出力の一部を 除いて静的な場合に遭遇します。 たとえば、ヘルプページでは、静的なヘルプ情報に加えて、 上部にログイン中のユーザー名が表示されるかもしれません。

この問題を解決するために、ユーザー名にしたがってキャッシュコンテンツを 変えることもできますが、多くのコンテンツはユーザー名を除いて同一になるため、 貴重なキャッシュスペースの大きな無駄になります。 また、ページをいくつかの断片に分けて個別にキャッシュさせることもできますが、 ビューとコードが非常に複雑になってしまいます。 より良い方法は、CController により提供される ダイナミックコンテンツ 機能を利用します。

ダイナミックコンテンツは、もしそれがフラグメントキャッシュの中に 含まれていても、キャッシュすべきではない出力の部分を意味します。 常にそのコンテンツを動的にするために、コンテンツがキャッシュから 読み込まれた時でも毎回そのコンテンツを生成する必要があります。 この理由から、ダイナミックコンテンツはあるメソッドまたはファンクションに より生成されることが必要とします。

目的の場所にダイナミックコンテンツを挿入するには、 CController::renderDynamic() を呼びます。

...他の HTML コンテンツ...
<?php if($this->beginCache($id)) { ?>
...キャッシュされるコンテンツの断片...
    <?php $this->renderDynamic($callback); ?>
...キャッシュされるコンテンツの断片...
<?php $this->endCache(); } ?>
...他の HTML コンテンツ...

上記中の $callback は有効な PHP コールバックを参照します。 これは、現在のコントローラクラスか、グローバル関数のメソッド名を参照する 文字列か、クラスメソッドを参照する配列でありえます。 renderDynamic() へのどんな追加パラメータも、 コールバックに渡されます。 コールバックは、それを表示する代わりに、動的な内容を返さなければなりません。

$Id: caching.dynamic.txt 163 2008-11-05 12:51:48Z weizhuo $

Be the first person to leave a comment

Please to leave your comment.