缓存分组 {/programmers/caching/caching-groups/}
你可以通过设置 $cache_id 分组来进行更复杂的分组。这是通过在 $cache_id 值中用竖线 | 分隔每个子组来完成的。你可以有任意多的子组。
-
你可以将缓存组想象成一个目录层次结构。例如,缓存组
'a|b|c'可以被看作是目录结构'/a/b/c/'。 -
clearCache(null,'a|b|c')就像是移除文件'/a/b/c/*'。clearCache(null,'a|b')就像是移除文件'/a/b/*'。 -
如果你指定了一个
$compile_id,例如clearCache(null,'a|b','foo'),它会被视为附加的缓存组'/a/b/c/foo/'。 -
如果你指定了一个模板名称,例如
clearCache('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'),然后用 clearCache(null,'themes|blue') 清除它们。
<?php
require('Smarty.class.php');
$smarty = new Smarty;
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);
// 清除所有以 'sports|basketball' 为前两个 cache_id 分组的缓存
$smarty->clearCache(null,'sports|basketball');
// 清除所有以 "sports" 为第一个 cache_id 分组的缓存。这将包括 "sports|basketball", 或 "sports|(任何)|(任何)|(任何)|..."
$smarty->clearCache(null,'sports');
// 清除具有 "sports|basketball" 作为 cache_id 的 foo.tpl 缓存文件
$smarty->clearCache('foo.tpl','sports|basketball');
$smarty->display('index.tpl','sports|basketball');
?>