smarty提供了强大的缓存功能。但有时我们并不希望整篇文档都被缓存,而是有选择的缓存某一部分内容或某一部分内容不被缓存。例如你在页面上端使用一个带有广告条位置的模板,广告条可以包含任何HTML、图象、FLASH等混合信息. 因此这里不能使用一个静态的链接,同时我们也不希望该广告条被缓存. 这就需要在 insert 函数指定,同时需要一个函数取广告条的内容信息。smarty也提供了这种缓存控制能力。
我们可以使用{insert}使模板的一部分不被缓存
可以使用$smarty->register_function($params,&$smarty)阻止插件从缓存中输出,
还可以使用$smarty->register_block($params,&$smarty)使整篇页面中的某一块不被缓存。
下面我们真对一个简单需求,分别说明这三种控制缓存输出的方法。
需求:被缓存的文档中当前时间不被缓存,随每次刷新而变化。
1、使用insert函数使模板的一部分不被缓存
index.tpl:
<div>{insert name="get_current_time"}</div>
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('index.tpl')){
.......
}
$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:
<div>{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('index.tpl')){
.......
}
$smarty->display('index.tpl');
注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为function
name为用户自定义标签名称,在这里是{current_time}
两个参数是必须的,即使在函数中没有使用也要写上。两个参数的功能同上。
3、使用register_block使整篇页面中的某一块不被缓存
index.tpl:
<div align='center'>
Page created: {"0"|date_format:"%D %H:%M:%S"}
{dynamic}
Now is: {"0"|date_format:"%D %H:%M:%S"}
... do other stuff ...
{/dynamic}
</div>
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('index.tpl')){
.......
}
$smarty->display('index.tpl');
注解:
定义一个函数,函数名格式为:smarty_type_name($params, &$smarty)
type为block
name为用户自定义标签名称,在这里是{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错误。
分享到:
相关推荐
在配置文件中我们应设置了缓存的目录,但是缓存的只有一个文件,怎么让一个模版有多个缓存文件呢
资源名称:兄弟连smarty3视频教程资源...中的三种主要的变量[Smarty3]自定义一些常用的函数插件用法Smarty3的缓存控制Smarty3的模板继承特性Smarty3的内置函 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
{$smarty} reserved variable [{$smarty}保留变量] 5. Variable Modifiers [变量调节器] capitalize [首字符大写] count_characters [字符计数] cat [连接字符串] count_paragraphs [计算段数] count_...
{$smarty} reserved variable [{$smarty}保留变量] 5. Variable Modifiers [变量调节器] capitalize [首字符大写] count_characters [字符计数] cat [连接字符串] count_paragraphs [计算段数] count_...
2、集成SMARTY缓存引擎,无需再配置SMARTY。3、集成CMVC访问风格的MYSQL类库。使用简单容易理解。例如:theApp->DB->setTable("#@user");theApp->DB->setSelect("*");theApp->DB->setCondition("where","id=1");the...
修改了smarty缓存的方式,在底层新增了缓存判断函数。 8.增加了共享内存缓存方式,后台可以直接控制共享内存的使用。众多磁盘缓存数据转为内存缓存。 9.修改了时间插件的样式控制代码,不受外界CSS的影响。 10.修正...
3.整合Smarty作为视图引擎,使用Smarty缓存作为WEB应用缓存技术; 4.其他功能:gzip输出、rss生成、列表分页、站点地图输出、文件上传; Y.PHP 1.1.0 Bug修复: 一、已解决实例化模块时,用户不能手动指定默认...
#2.[框架]更改模板缓存方式使之容易控制且性能得到提升(弃用smarty缓存) #3.增加自定义伪静态(列表页、文章页) #4.后台文章增加批量快捷操作(删除、修改分类、审核) #5.增加文章排序 #6.增加文章属性管理 #7....
WOC 1.2在1.1的基础上增加了缓存管理,并且提供了smarty模板引擎支持 注意:升级时可以对1.1的文件进行覆盖,此外在linux系统中安装时请注意设置cache,app/design/cache,app/design/compile三个目录的读写权限为...
“YIXUNCMS网站建站系统2.0.4.9SD版”是“2.0.4.8增强版”的升级版本,“2.0.4.9SD版”重新规划了前端视图与控制器,将 模块划分为“单页”“文章”“图片”“下载”“视频”五个主要模块,同时引入了公共缓存机制,...
CMVC一个轻量的、易于学习的PHP开源框架。基于PHP三层设计理念MVC (Model-View-Controller) 构建。内部集成了MYSQL访问类库,缓存控制系统,SMARTY模板引擎。简单易学,特别适合PHP初学者学习PHP的MVC开发方式。
它是一款基于面向对象的TPS-MVC全分离式框架,由工具类、组件类、业务逻辑层—数据模型层、视图层、控制层组成,重写常用函数、类库,整合Smarty的组件类,收集升级Web项目常用类,可根据功能需求自由扩展。...
增加配置cache_multidir,让spAccess的缓存文件分目录生成,避免缓存文件过分集中在同一目录。 修正spUrlRewrite在r170版本中生成地址的判断。 修改spVerifier对未知规则的提示。 更新PDO驱动,修复了UTF8的支持...
SimpleLog是基于Smarty模板引擎编写的一套界面简洁的博客系统,开源免费,程序与模板分离,方便在后台自定义模板,系统前台使用了jQuery框架,在jQuery基础上实现了Ajax功能,主要表现在日志评论加载以及用户注册上...
30:PHP模板引擎Smarty缓存应用 31:PHP在线编辑器fckeditor应用 32:PHP5中Cookie与 Session详解 33:PHP5中图片验证码的制作(上) 34:PHP5中图片中文验证码(下) 35:PHP5文字图片混合水印与缩略图 36:PHP中正...
2.0.4.9SD版在默认的SMARTY缓存基础上引入了公共缓存机制,即使用户不开启SMARTY缓存,网站公用数据在执行时也会进行缓存,可有效减少对数据库的查询,从而提高运行效率。 特点三:管理模块调整 2.0.4.9SD版对系统...
大量缓存技术,从而减轻服务器数据库负载 目前市场上权限最全的商城系统(多级管理权限控制,让网站多人维护更轻松) 模块化开发,开发更灵活 Smarty模板引擎,更贴近大众 模板函数自由调用,让模板制作更灵活 ...
它是一款基于面向对象的TPS-MVC全分离式框架,由工具类、组件类、业务逻辑层—数据模型层、视图层、控制层组成,重写常用函数、类库,整合Smarty的组件类,收集升级Web项目常用类,可根据功能需求自由扩展。...
它是一款基于面向对象的TPS-MVC全分离式框架,由工具类、组件类、业务逻辑层—数据模型层、视图层、控制层组成,重写常用函数、类库,整合Smarty的组件类,收集升级Web项目常用类,可根据功能需求自由扩展。...
大量缓存技术,从而减轻服务器数据库负载 目前市场上权限最全的商城系统(多级管理权限控制,让网站多人维护更轻松) 模块化开发,开发更灵活 Smarty模板引擎,更贴近大众 模板函数自由调用,让模板制作更灵活 ...