Smarty中缓存操作技巧的示例分析
这篇文章将为大家详细讲解有关Smarty中缓存操作技巧的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
具体如下:
smarty缓存控制
smarty提供了强大的缓存功能。但有时我们并不希望整篇文档都被缓存,而是有选择的缓存某一部分内容或某一部分内容不被缓存。例如你在页面上端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定,同时需要一个函数取广告条的内容信息。smarty也提供了这种缓存控制能力。
我们可以使用{insert}使模板的一部分不被缓存
可以使用$smarty->register_function($params,&$smarty)阻止插件从缓存中输出,
还可以使用$smarty->register_block($params,&$smarty)使整篇页面中的某一块不被缓存。
下面我们真对一个简单需求,分别说明这三种控制缓存输出的方法。
需求:被缓存的文档中当前时间不被缓存,随每次刷新而变化。
1、使用insert函数使模板的一部分不被缓存
index.tpl:
{insert name="get_current_time"}
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:
{current_time}{/div}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为functionname为用户自定义标签名称,在这里是{current_time}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。
3、使用register_block使整篇页面中的某一块不被缓存
index.tpl:
Page created: {"0"|date_format:"%D %H:%M:%S"}{dynamic}Now is: {"0"|date_format:"%D %H:%M:%S"}... do other stuff ...{/dynamic}index.php:
function smarty_block_dynamic($param, $content, &$smarty) {return $content;}$smarty = new Smarty;$smarty->caching = true;$smarty->register_block('dynamic', 'smarty_block_dynamic', false);if(!$smarty->is_cached()){ .......}$smarty->display('index.tpl');注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为blockname为用户自定义标签名称,在这里是{dynamic}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。
4、总结
(1)对缓存的控制能力:
使用register_function和register_block能够方便的控制插件输出的缓冲能力,可以通过第三个参数控制是否缓存,默认是缓存的,需要我们显示设置为false,正如我们试验中的所做的那样
复制代码 代码如下:
$smarty->register_function('current_time','smarty_function_current_time',false);
但insert函数默认是不缓存的。并且这个属性不能修改。从这个意义上讲insert函数对缓存的控制能力似乎不如register_function和register_block强。(2)使用方便性:
但是insert函数使用非常方便。不用显示注册,只要在当前请求过程中包含这个函数smarty就会自动在当前请求的过程中查找指定的函数。
当然register_function也可以做到不在运行时显示注册。但是那样做的效果跟其他模版函数一样,统统被缓存,并且不能控制。
如果你使用在运行时显示调用register_function注册自定义函数,那么一定要在调用is_cached()方法前完成函数的注册工作。
否则在is_cached()这一步缓存文档将因为找不到注册函数而导致smarty错误
Smarty用户自定义函数实例
register_function('date_now', 'print_current_date');function print_current_date($params, &$smarty){ if(empty($params['format'])) { $format = "%b %e, %Y"; } else { $format = $params['format']; } return strftime($format,time());}?>在模板中使用
{date_now}{* or to format differently *}{date_now format="%Y/%m/%d"}关于"Smarty中缓存操作技巧的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
缓存 函数 控制 参数 模板 两个 内容 属性 广告 方法 用户 能力 输出 功能 可以通过 插件 文档 格式 注解 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发学习项目 手机3d软件开发 宝山区软件开发创新服务 潮水时间表软件开发 向哪咨询网络安全的问题 pg数据库数组类型转化 不动产网络安全学习 诚邦网络技术有限公司干什么的 溢思优控制网络安全 浪潮服务器指示灯闪绿色开不了机 计算机软件开发必修科目 汨罗软件开发培训学校 asp中页面调用数据库 网络安全相关演讲timu 数据库中左边界设置为左边对齐 网络安全宣传周是哪几天 交付易互联网科技有限公司 win服务器设置中文 win7ftp服务器配置 google数据库在哪里 部门网络安全自查总结报告 ps4国服务器 上海易络客网络技术 软件开发类财务报表模板 戴尔服务器R730 黎涛网络技术工作室425分 我的世界网易版32k 服务器 揭阳数据链软件开发报价行情 软件开发风险识别表 戴尔t440服务器h330