抛砖引玉系列-smarty缓存控制(1)
smarty提供了强大的缓存功能。但有时我们并不希望整篇文档都被缓存,而是有选择的缓存某一部分内容或某一部分内容不被缓存。例如你在页面上端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定,同时需要一个函数取广告条的内容信息。smarty也提供了这种缓存控制能力。
我们可以使用{insert}使模板的一部分不被缓存
可以使用$smarty->register_function($params,&$smarty)阻止插件从缓存中输出,
还可以使用$smarty->register_block($params,&$smarty)使整篇页面中的某一块不被缓存。
下面我们真对一个简单需求,分别说明这三种控制缓存输出的方法。
需求:被缓存的文档中当前时间不被缓存,随每次刷新而变化。
1、使用insert函数使模板的一部分不被缓存
index.tpl:
index.php
function insert_get_current_time(){
return date("Y-m-d H:m:s");
}
$smarty=new smarty();
$smarty->caching = true;
if(!$smarty->is_cached()){
.......
}
$smarty->display('index.tpl');
注解:
定义一个函数,函数名格式为:inser_name(array $params, object &$smarty),
函数参数可选的,如果在模板的insert方法中需要加入其他属性,就会作为数组传递给用户定义的函数。
如:{insert name='get_current_time' local='zh'}
在get_current_time函数中我们就可以通过$params['local']来获得属性值。
如果在get_current_time函数中需要用到当前smarty对象的方法或属性,就可以通过第二个参数获得。
这时你会发现index.tpl已被缓存,但当前时间却随每次刷新在不断变化。
2、使用register_function阻止插件从缓存中输出
index.tpl:
index.php:
function smarty_function_current_time($params, &$smarty){
return date("Y-m-d H:m:s");
}
$smarty=new smarty();
$smarty->caching = true;
$smarty->register_function('current_time','smarty_function_current_time',false);
if(!$smarty->is_cached()){
.......
}
$smarty->display('index.tpl');
注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为function
name为用户自定义标签名称,在这里是{current_time}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。
提示:试试键盘 “← →” 可以实现快速翻页
每日精选
-
双涡轮风扇压满帧 荣耀WIN2解锁长效满帧体验
荣耀WIN2作为年度T0电竞夯机,给用户带来全都要的体验。不仅升级了处理器规格,还打造荣耀东风双子星涡轮散热,实现整机全域控温,实现从满电到关机的全程满帧游戏体验。
-
低矮通行+热活水清洁!石头P30 Pro双11开门红上新开抢
今晚8点即将开启双11全平台开门红。如果还在纠结扫地机怎么选,不妨看看石头P30 Pro。石头P30 Pro围绕家庭清洁中的真实需求出发,做到进得去、扫得净、不迷路、少维护。
-
个护小家电零售额下滑 行业从 "参数竞争" 转向 "体验竞争"
奥维云网最新数据显示,2026年前三季度个护小家电线上零售额173.4亿元,同比下滑约3.4%。电吹风、电动牙刷、电动剃须刀三大品类销量均出现两位数下滑。
-
-
三季度厨卫市场零售额规模同比下滑10.3%
奥维云网最新公布了第三季度厨卫市场总结。数据显示,2026年1-9月厨卫整体市场零售额规模1015亿元,同比下滑10.3%。
-
-
李健直播首秀:荣耀Magic9销量与口碑双线领跑
10 月 30 日,荣耀CEO李健在其个人直播首秀中表示,截至W43周,荣耀Magic9系列连续四周稳居安卓旗舰第一。
-
-
京东11.11前半程战报:AI新品成交额环比增超130%
京东11.11前半程AI硬件消费升温,Aidol创造营超50款新品成交额环比增超130%,S2冒险季吸引200余团队参与,AI趋势品类与线下门店客流同步走高
-
国行版苹果智能11月4日开测 12月iOS 27.3上线
苹果智能AI功能终于要在国行版上线了,苹果官网已经发出公告,称将在11月4日起随最新的iOS开发者Beta版开放测试,并将于12月iOS 27.3正式发布时面向中国用户推出。

网友评论