キャッシュのグループ
cache_idのグループを設定する事で、より複雑なグループにする事が出来ます。
これは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 のみ動作します。
グループとしてそれらをクリアするためには、 単一のキャッシュグループ階層の下でテンプレートをグループ化する必要があります。
例えば "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") によってキャッシュをクリアする事が出来ます。
例えば、"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");
?>