日期:2014-05-17  浏览次数:20414 次

smarty是不是自动缓存模板?
比如

//$obj_tpl是smarty对象
$obj_tpl->setTemplateRoot(dirname(__FILE__));
$obj_tpl->display("index.tpl");

然后我有2个目录,每个目录都有index.tpl,php文件和index.tpl在一起。也就是说有2套模板。
我发现第二个目录读的是第一个目录的index.tpl。
我用了

$obj_tpl->caching=false;
$obj_tpl->clear_all_cache();//清除所有缓存
$obj_tpl->clear_cache('index.tpl');//清除index.tpl的缓存

也不管用。
dirname(__FILE__)的值每个目录不一样。
难道不能用同名的模板文件吗?路径是不同的。
Smarty

------解决方案--------------------
你看到的应该是php和hmtl的编译文件吧,不是缓存
------解决方案--------------------
通常 smarty 的模板文件存放在 template 目录中,编译后的模板文件存放在 template_c 目录中
smarty 不会缓存模板,因为模板是用户的,他无权干预
smarty 只是读取模板文件,并将其编译成 php 文件供实际运行时使用

不太清楚你“有2个目录”的含义
如果这“2个目录”是两个项目,那么这“2个目录”中就应该分别有 template 和 template_c 子目录
如果这“2个目录”是表示同一项目的不同样式,那么这“2个目录”都应该放在 template 子目录中
使用时应带上目录名
$obj_tpl->display("样式2/index.tpl");