Prestashop使用一個名爲Lazy Cache的系統。
這裏是/classes/SmartyCustom
CLASSE的clearAllCache
和clearCache
方法:
public function clearAllCache($exp_time = null, $type = null)
{
Db::getInstance()->execute('REPLACE INTO `'._DB_PREFIX_.'smarty_last_flush` (`type`, `last_flush`) VALUES (\'template\', FROM_UNIXTIME('.time().'))');
return $this->delete_from_lazy_cache(null, null, null);
}
public function clearCache($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
{
return $this->delete_from_lazy_cache($template_name, $cache_id, $compile_id);
}
public function delete_from_lazy_cache($template, $cache_id, $compile_id)
{
if (!$template) {
return Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'smarty_lazy_cache`', false);
}
$template_md5 = md5($template);
$sql = 'DELETE FROM `'._DB_PREFIX_.'smarty_lazy_cache`
WHERE template_hash=\''.pSQL($template_md5).'\'';
if ($cache_id != null) {
$sql .= ' AND cache_id LIKE "'.pSQL((string)$cache_id).'%"';
}
if ($compile_id != null) {
if (strlen($compile_id) > 32) {
$compile_id = md5($compile_id);
}
$sql .= ' AND compile_id="'.pSQL((string)$compile_id).'"';
}
Db::getInstance()->execute($sql, false);
return Db::getInstance()->Affected_Rows();
}
正如你可以看到,緩存文件在數據庫表下的索引smarty_lazy_cache
。並且緩存文件不會被刪除,只能從表中取消索引。
在我的情況下(PS 1.6.1.6),它只刪除一些文件夾,但不是全部文件夾。在'cache/smarty/compile'中,當你調用'Tools :: clearSmartyCache();' –