你更改了数据当然是显示新的了。把你程序改一下。<?php
include_once("../etc/define.php");
require('Smarty.class.php');
$tpl = new Smarty;
$tpl->template_dir = __ROOT_TEMPLATES_TPATH.__SETTING_STYLE;
$tpl->compile_dir  = __ROOT_TPLS_TPATH."templates_c/".__SETTING_STYLE;
$tpl->config_dir   = __ROOT_TPLS_TPATH."configs/";
$tpl->cache_dir    = __ROOT_TPLS_TPATH."cache/";
if($tpl->is_cached("testcache.tpl"))
{
  $tpl->$tpl->display("testcache.tpl");
  exit;
}$tpl->cache_lifetime = 60 * 60 * 24;  
$tpl->caching = true;      $tpl->assign("name", "abc"); $tpl->display("testcache.tpl");
?>

解决方案 »

  1.   

    我没用过smarty,看到你的问题才下载smarty看了一下。应该是这样用的。不对也别骂我……
      

  2.   

    $tpl->$tpl->display("testcache.tpl");
    这句打错了
    $tpl->display("testcache.tpl");
      

  3.   

    我没用过smarty,不是很清楚他的缓存机制。
    不过从你的表述上来看,就应该是这样的
    你说“但是如果修改abc为cba,上传以后刷新,并没有看到想象中的abc,而是更新到了cba。”
    看看连程序都改动了,老程序的“缓存”还有意义吗?
      

  4.   

    看了一下,smarty写得满好的。以后还是用它来写php吧。
      

  5.   

    加这行语句试试
    $tpl->force_compile = false;<?php
    include_once("../etc/define.php");
    require('Smarty.class.php');
    $tpl = new Smarty;
    $tpl->template_dir = __ROOT_TEMPLATES_TPATH.__SETTING_STYLE;
    $tpl->compile_dir  = __ROOT_TPLS_TPATH."templates_c/".__SETTING_STYLE;
    $tpl->config_dir   = __ROOT_TPLS_TPATH."configs/";
    $tpl->cache_dir    = __ROOT_TPLS_TPATH."cache/";$tpl->cache_lifetime = 60 * 60 * 24;  
    $tpl->caching = true;
    $tpl->force_compile = false;      $tpl->assign("name", "abc"); $tpl->display("testcache.tpl");
    ?>
      

  6.   

    如果你的模板文件没有修改,就算程序改变了,cache还是不会变的,前提是你打开了cache,
    并且cache没有过期。因为模板不修改,smarty就不会重新编译文件(force_complie=false)。
    所以$tpl->force_complie = false;不允许强制编译文件。在开发和调试时把它设置为true,便于
    查看运行结果。
      

  7.   

    这个问题解决了,我到smarty.php.net上去问了问,结果是因为:我的temlate_dir设置为多路径,而cache_dir也应该设置为多路径。也就是$tpl->cache_dir    = __ROOT_TPLS_TPATH."cache/".__SETTING_STYLE;就是这样了,希望能对各位有所帮助。另外谢谢各位在上面的答复。