Smarty缓存与数据库内容错误

4
我使用了Smarty缓存功能,今天我意识到我的内容没有正确地得到更新。
我使用了文件缓存方式来处理Smarty的这些模板:
- index.html(用于缓存主页(约8k)) - list.html(用于缓存大约10个页面 - 每个页面约7k)
我的自定义CMS允许我更改主页但却无法刷新。我已经正确地使用了cache_dir和cache特性,因为如果我删除缓存文件,我可以看到我的内容得到了更新。
有没有简单的方法可以在刷新页面内容时不需要每次都手动删除这些文件?
2个回答

4
您可以使用这个:
$Smarty = new Smarty();
$Smarty->caching = 1;

$SmartyTemplate = $Smarty->createTemplate($yourfile, $your_cache_id);
// $row = mysql_query("select date_modified from table where ...

if ($SmartyTemplate->isCached() && $SmartyTemplate->cached->timestamp < $row['date_modified']) {
    $Smarty->clearCache($yourfile, $your_cache_id); 
}
$SmartyTemplate->assign('variables', 'data');
$SmartyTemplate->display();

1
你应该查看$smarty->force_cache。如果你是通过手动方式来使缓存失效而不是调用clearCache(),那么将其设置为true。 - rodneyrehm
3
@rodneyrehm为什么?clear会清除它并强制覆盖,是吗? - EscoMaji

1

你有两个选择。

1)当更新index.html或list.html的任何内容时,请告诉Smarty清除相应的缓存,使用$smarty->clearCache("index.html");参见文档

2)编写自己的CacheResource。然后可以重载fetch()和fetchTimestamp()方法,以额外查询某个数据库的外部修改时间。这样,您就不必clearCache()来通知Smarty有些东西已经改变了。

第一种选择更简单,更快速实现。第二种选择是全局性的事情,可能会浪费资源在额外的数据库连接上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接