现在的位置: 首页 > 综合 > 正文

smarty局部禁用缓存机制

2018年05月25日 ⁄ 综合 ⁄ 共 957字 ⁄ 字号 评论关闭

smarty作为是php最常用的模板引擎之一。其提供了近乎完美的缓存机制,当用户首次访问某个页面时,程序从数据库提取数据,展现到前台,同时生成一个静态的html页面,当用户再次访问这个页面时,直接显示缓存的html页面,不会再次操作数据库

但是这里面就有一个问题,那就是当缓存一个页面时,可能这个页面里面的个别数据不需要缓存,比如该页面的访问量,评价,留言等等。

以下,就是smarty中三种整页缓存,而局部不缓存的方法:

1,insert 法
定义一个函数显示时间的:
 function insert_get_current_time(){
    $timestamp=empty($timestamp)?time():$timestamp;
    $timeoffset=(int) '+8';
    return $ret=gmdate("Y-n-j g:ia", $timestamp + $timeoffset * 3600);
}
然后在模板中:
{insert name="get_current_time"}
这样每次打开页面,显示的都是即时时间,而不是缓存的。注意这里的函数名一定要以insert开头,模板中的name与之对应
2,动态block法
 //部分缓存
function smarty_block_nocache($param, $content, $smarty)
 {
    return $content;
}
$smarty->register_block('nocache', 'smarty_block_nocache', false);
在模板中:
{nocache}
{$smarty.now}
{/nocache}
这样每次刷新页面,显示的时间都是不同的。
3,插件block 法
在Smarty/plugins目录下建一个文件
block.nocache.php 内容如下:
 <?php 
function smarty_block_nocache($param, $content, $smarty)
{
      return $content; 
}  
?>
这样做与方法2的效果是一样的,模板中标签也一样。在 php文件中就不必要再register_block了,很方便。

在实际应用过中,第1种和第3种方法都要用到。第1种方法是对于较大的数据的展示,如评论列表;而第3种则是对小数据的展示,如点击量、购买量等等。

抱歉!评论已关闭.