キャッシュのグループ

cache_idのグループを設定する事で、より複雑なグループにする事が出来ます。これはcache_idの値の中の"|"によって各サブグループに分けられる事で成されます。サブグループはいくらでも持つ事が出来ます。

ディレクトリ階層のようなキャッシュグループを考える事が出来ます。例えば "a|b|c" というキャッシュグループは、"/a/b/c/" というディレクトリ構造だと考えられます。 clear_cache(null,"a|b|c") はファイル "/a/b/c/*" を、clear_cache(null,"a|b") はファイル "/a/b/*" を削除するのに似ています。 もし、clear_cache(null,"a|b","foo") のようなcompiled_id が指定されると、付加されたキャッシュグループ "/a/b/c/foo/" として扱われます。 clear_cache("foo.tpl","a|b|c") のようなテンプレート名が指定されると、Smarty は "/a/b/c/foo.tpl" を削除しようと試みます。 また、"/a/b/*/foo.tpl" のような、複数のキャッシュグループの下でテンプレート名を指定して削除する事は出来ません。 キャッシュグループは left-to-right のみ動作します。グループとしてそれらをクリアするためには、 単一のキャッシュグループ階層の下でテンプレートをグループ化する必要があります。

キャッシュのグループ化はテンプレートディレクトリ階層によって混乱させられるべきではなく、 テンプレートがどのような構造なのかも知り得ません。 例えば、"themes/blue/index.tpl" のようなテンプレート構造があり、"blue" テーマのキャッシュファイルを全てクリアしたい時、 テンプレートファイル構造をまねた display("themes/blue/index.tpl","themes|blue") のような キャッシュグループ構造を作成する必要があり、それならば clear_cache(null,"themes|blue") によってキャッシュをクリアする事が出来ます。

例 13-9. cache_id グループ

<?php
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

// はじめの2つのcache_idグループが"sports|basketball"のキャッシュを全てクリアします。
$smarty->clear_cache(null,"sports|basketball");

// はじめのcache_idグループが"sports"のキャッシュを全てクリアします。
// これは"sports|basketball"又は"sports|(anything)|(anything)|(anything)|..."を用いてインクルードされたものでしょう。
$smarty->clear_cache(null,"sports");

// cache_id として"sports|basketball"を用いてfoo.tpl のキャッシュファイルをクリアする
$smarty->clear_cache("foo.tpl","sports|basketball");


$smarty->display('index.tpl',"sports|basketball");
?>