比如//$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

解决方案 »

  1.   

    $obj_tpl->caching=false;
    你缓存都没开启,你清除什么呢?
      

  2.   

    你看到的应该是php和hmtl的编译文件吧,不是缓存
      

  3.   

    嗯,用词错误,叫compiled应该是编译
      

  4.   

    通常 smarty 的模板文件存放在 template 目录中,编译后的模板文件存放在 template_c 目录中
    smarty 不会缓存模板,因为模板是用户的,他无权干预
    smarty 只是读取模板文件,并将其编译成 php 文件供实际运行时使用不太清楚你“有2个目录”的含义
    如果这“2个目录”是两个项目,那么这“2个目录”中就应该分别有 template 和 template_c 子目录
    如果这“2个目录”是表示同一项目的不同样式,那么这“2个目录”都应该放在 template 子目录中
    使用时应带上目录名
    $obj_tpl->display("样式2/index.tpl");
      

  5.   

    不太明白项目是什么含义?
    就是一个站点下的2个子目录啊。
    我看只有一个template_c 目录
    $obj_tpl->display(dirname(__FILE__)."/index.tpl");
    确实管用
      

  6.   

    开始我以为只要指定了$obj_tpl->setTemplateRoot(dirname(__FILE__));那么不同的dir会独立识别。没想到不同的dir里的同名模板会被当成同一个。