局部缓存技术

2013-07-01   来源:站长日记       编辑:沧海桑田   类别:网店系统    转载到:    发表评论

局部缓存技术 在smarty和ecshop中的应用

ECShop模板dwt文件中{insert name=’cart_info’}
ECShop {insert name=’cart_info’}|insert_function|动态函数库

ECShop模板的dwt文件中类似 {insert_scripts files=’common.js’}或者{insert name=’cart_info’}的代码,{insert_scripts files=’common.js’},是调用JS文件的语句,
{insert name=’cart_info’}是函数返回的字符串,可以是HTML,也可以是普通字符串,ECSHOP根目录下includes文件夹,查找一个名为 lib_insert.php的文件,文件中查cart_info会发现insert_cart_info()函数,{insert name=’cart_info’}内容就是该函数的返回值,函数名的命名规则是  insert_函数后缀名,模板中用{insert name=’函数后缀名’}调用函数的返回值,各个函数的格式都是 function insert_***() ,每个函数都是一个功能控制模块,

insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数,当前页面自动查找 insert_cart_info函数,如果当前页面没有该函数的话,会自动去插件目录中 查找 insert.cart_info.php文件中有无 smarty_insert_cart_info 函数!该函数 一般写 一些 连接数据库代码! 实现时时 更新!

类似函数还有 register_block 例如页面前端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息,因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存,这需要 insert 函数

可以在此文件中定义自己的函数,在模板中通过类似的方式调用,这个动态的调用功能很方便,只要定义函数,就可以在任何模板中调用该函数的返回值,就不用在去找该模板对应的PHP文件了,删除时直接在模板里删掉


很多道理在生活中相似相通, 类似的 上面的方法在Smarty中一样存在,
Smarty [the compiling PHP template engine ] register_block 注册一个块
void register_block (string name, mixed impl, bool cacheable, array or null cache_attrs)
Use this to dynamically register block functions plugins. Pass in the block function name, followed by the PHP function callback that implements it.
用来动态注册/定义块函数插件。前两个参数指定块函数名称和执行函数的名称。
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了很方便

18

1
18|1 | 鲜花 VS 砸蛋 | 61阅读 0评论