$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/*' を削除するのに似ています。
$compile_id
を clear_cache(null,'a|b','foo') のように指定すると、
それをキャッシュグループに追加して
'/a/b/c/foo/' として扱います。
テンプレート名を
clear_cache('foo.tpl','a|b|c') のように指定すると、
Smarty は '/a/b/c/foo.tpl' を削除しようと試みます。
また、'/a/b/*/foo.tpl' のように、
複数のキャッシュグループの下でテンプレート名を指定して削除する事は出来ません。
キャッシュグループは左から右へ向かう順序でのみグループ化を定義できます。
グループとしてそれらをクリアするためには、
単一のキャッシュグループ階層の下でテンプレートをグループ化する必要があります。
キャッシュのグループ化はテンプレートディレクトリ階層によって混乱させられるべきではなく、
テンプレートがどのような構造なのかも知り得ません。例えば、
themes/blue/index.tpl のようなテンプレート構造があり、
“blue” テーマのキャッシュファイルを全てクリアしたい時、
テンプレートファイル構造をまねた
display('themes/blue/index.tpl','themes|blue')
のような キャッシュグループ構造を作成する必要があり、それならば
clear_cache(null,'themes|blue')
によってキャッシュをクリアする事が出来ます。
Example 14.9. $cache_id groups
<?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');
?>