smarty局部缓存技术[源码分析]
程序员文章站
2022-06-04 09:06:46
...
之前一直使用其它的模板引擎,今天在听bkJia培训课程的时候,讲到了smarty模板引擎的局部缓存,感觉挺好的,在此结合自身的理解,感慨一翻,要是有什么不对的地方,希望朋友跟贴回复。 大家一起共勉学习。 同时也感谢张老师,为像我们这样的PHP初学者提供一个非常优秀的学习平台。
发现smarty是如此强大与神奇的一个东东,使我对它的好感不亚于对以前使用的模板引擎.
由于我默认是开启smarty的缓存的,但是在些地方的数据是实时更新或者更新较快的,不宜缓存,这样,局部缓存便有用武之地了。
1,insert 法
定义一个函数显示时间的:
- function insert_get_current_time(){
- $timestamp=emptyempty($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 内容如下:
- function smarty_block_nocache($param, $content, $smarty)
- {
- return $content;
- }
- ?>
这样做与方法2的效果是一样的,模板中标签也一样。在 php文件中就不必要再register_block了,很方便。