is_cached

is_cached -- 

bool is_cached ( string template [, string cache_id [, string compile_id]])

テンプレートが有効なキャッシュを持つ時、trueを返します。これは、キャッシュが有効の時のみ機能します。

例 1. is_cached

<?php
$smarty
->caching = true;

if(!
$smarty->is_cached("index.tpl")) {
// ここでデータベースを呼び出し、値を割り当てる
}

$smarty->display("index.tpl");
?>

1つのテンプレートに複数のキャッシュが存在する場合は、第2パラメータにcache_idを指定します。

第3パラメータにコンパイルidを渡す事が出来ます。 このパラメータを省いた時、永続的な $compile_id が使用されます。

キャッシュidを渡さずにコンパイルidだけを渡したい場合は、キャッシュid にnullを 渡す必要があります。

例 2. 複数のキャッシュによる is_cached

<?php
$smarty
->caching = true;

if(!
$smarty->is_cached("index.tpl", "FrontPage")) {
  
// ここでデータベースを呼び出し、値を割り当てる
}

$smarty->display("index.tpl", "FrontPage");
?>

テクニカルノート: is_cached が true を返すと、実際にはキャッシュされた出力が読み込まれ、 内部的に格納されます。続いてコールされる display() または fetch() はこの内部的に格納された出力を返し、 キャッシュファイルを再読み込みしようとはしません。次の例のように、is_cachedをコールしてから displayをコールするまでの間に、第2のプロセスがキャッシュをクリアする時に発生するかもしれない競合条件を防ぎます。 これは clear_cache() をコールする事を意味し、 キャッシュ設定の他の変更は is_cached が true を返した後では何も影響しないだろう事を意味します。