smarty局部缓存

Smarty缓存功能几乎是Smarty模板中占了40%的部分。除了模板语法以外基本就是缓存的功效了。

一、可在同一程序中对不同模板文件使用不同的缓存时间

二、可使用不同的cache_id实现同一模板的不同缓存(想起asp.net的根椐$request缓存),这对统一入口的程序很有用,可以根椐url来生成不同的缓存

三、可使用$cache_handler_func来使用自定义缓存处理函数

四、可控性强,可对同一文件的部分设定是否缓存

以下是我的插件改造方法,将该功能改成一个插件:
1)定义一件插件函数:block.cacheless.php,放在smarty的plugins目录
block.cacheless.php的内容如下:
[php]
function smarty_block_cacheless($param, $content, &$smarty) {
return $content;
}
?>
[/php]

2) 编写程序及模板
示例程序:testCacheLess.php
[php]
include('Smarty.class.php');
$smarty = new Smarty;
$smarty->caching=true;
$smarty->cache_lifetime = 6;
$smarty->display('cache.tpl');
?>
[/php]
所用的模板:cache.tpl
[php]
已经缓存的:{$smarty.now}
{cacheless}
没有缓存的:{$smarty.now}
{/cacheless}
[/php]

现在运行一下,发现是不起作用的,两行内容都被缓存了

3)改写Smarty_Compiler.class.php(注:该文件很重要,请先备份,以在必要时恢复)
查找:
$this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true); //我的在705行
修改成:
if($tag_command == 'cacheless') $this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, false);
else $this->_plugins['block'][$tag_command] = array($plugin_func, null, null, null, true);

你也可以直接将原句的最后一个参数改成false,我对smarty的内部机制不太了解,所以加了一个判断,只要block是cacheless的才不作缓存。

4)OK,现在清除template_c里的编译文件,重新运行,起作用了吧?

经过这些改造,以后只需要在模板定义中,不需要缓存的部分(实时比分,广告,时间等)使用{cacheless}不需缓存的内容{/cacheless}即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值