ダイナミックコンテンツ

フラグメントキャッシュページキャッシュ を使う際、出力全体が比較的静的で、一ヶ所ないし数ヶ所だけが例外的に動的であるというような状況に遭遇します。 たとえば、ヘルプページは、全体としては静的なヘルプ情報を表示しますが、上部にだけ、ログイン中のユーザ名を表示するかもしれません。

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

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

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

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

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

$Id$

Be the first person to leave a comment

Please to leave your comment.