`
阿尔萨斯
  • 浏览: 4169436 次
社区版块
存档分类
最新评论

smarty缓存控制

 
阅读更多
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错误。
分享到:
评论

相关推荐

    smarty 缓存控制前的页面静态化原理

    在配置文件中我们应设置了缓存的目录,但是缓存的只有一个文件,怎么让一个模版有多个缓存文件呢

    兄弟连smarty3视频教程

    资源名称:兄弟连smarty3视频教程资源...中的三种主要的变量[Smarty3]自定义一些常用的函数插件用法Smarty3的缓存控制Smarty3的模板继承特性Smarty3的内置函 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    smarty手册.chm

    {$smarty} reserved variable [{$smarty}保留变量] 5. Variable Modifiers [变量调节器] capitalize [首字符大写] count_characters [字符计数] cat [连接字符串] count_paragraphs [计算段数] count_...

    Smarty中文手册 chm版

    {$smarty} reserved variable [{$smarty}保留变量] 5. Variable Modifiers [变量调节器] capitalize [首字符大写] count_characters [字符计数] cat [连接字符串] count_paragraphs [计算段数] count_...

    php开源学习型框架CMVC v1.2.0

    2、集成SMARTY缓存引擎,无需再配置SMARTY。3、集成CMVC访问风格的MYSQL类库。使用简单容易理解。例如:theApp-&gt;DB-&gt;setTable("#@user");theApp-&gt;DB-&gt;setSelect("*");theApp-&gt;DB-&gt;setCondition("where","id=1");the...

    BIWEB WMS PHP开源企业建站系统 v5.8.5.rar

    修改了smarty缓存的方式,在底层新增了缓存判断函数。 8.增加了共享内存缓存方式,后台可以直接控制共享内存的使用。众多磁盘缓存数据转为内存缓存。 9.修改了时间插件的样式控制代码,不受外界CSS的影响。 10.修正...

    Y.PHP 1.1.0.rar

    3.整合Smarty作为视图引擎,使用Smarty缓存作为WEB应用缓存技术; 4.其他功能:gzip输出、rss生成、列表分页、站点地图输出、文件上传; Y.PHP 1.1.0 Bug修复: 一、已解决实例化模块时,用户不能手动指定默认...

    TXTCMS内容管理系统 X1.3

    #2.[框架]更改模板缓存方式使之容易控制且性能得到提升(弃用smarty缓存) #3.增加自定义伪静态(列表页、文章页) #4.后台文章增加批量快捷操作(删除、修改分类、审核) #5.增加文章排序 #6.增加文章属性管理 #7....

    WOC开源网站运营管理系统 v1.3.zip

    WOC 1.2在1.1的基础上增加了缓存管理,并且提供了smarty模板引擎支持 注意:升级时可以对1.1的文件进行覆盖,此外在linux系统中安装时请注意设置cache,app/design/cache,app/design/compile三个目录的读写权限为...

    YIXUNCMS网站建设系统 v2.0.4.91 SD版

    “YIXUNCMS网站建站系统2.0.4.9SD版”是“2.0.4.8增强版”的升级版本,“2.0.4.9SD版”重新规划了前端视图与控制器,将 模块划分为“单页”“文章”“图片”“下载”“视频”五个主要模块,同时引入了公共缓存机制,...

    finecms_v2.3.0.0423.zip_8xMvC0v_V2 _finecms

    CMVC一个轻量的、易于学习的PHP开源框架。基于PHP三层设计理念MVC (Model-View-Controller) 构建。内部集成了MYSQL访问类库,缓存控制系统,SMARTY模板引擎。简单易学,特别适合PHP初学者学习PHP的MVC开发方式。

    EQPHP中文免费开源TPS-MVC框架v1.0

    它是一款基于面向对象的TPS-MVC全分离式框架,由工具类、组件类、业务逻辑层—数据模型层、视图层、控制层组成,重写常用函数、类库,整合Smarty的组件类,收集升级Web项目常用类,可根据功能需求自由扩展。...

    SpeedPHP 3.1.89 UTF8.zip

    增加配置cache_multidir,让spAccess的缓存文件分目录生成,避免缓存文件过分集中在同一目录。 修正spUrlRewrite在r170版本中生成地址的判断。 修改spVerifier对未知规则的提示。 更新PDO驱动,修复了UTF8的支持...

    Simple-log PHP博客 v1.5

    SimpleLog是基于Smarty模板引擎编写的一套界面简洁的博客系统,开源免费,程序与模板分离,方便在后台自定义模板,系统前台使用了jQuery框架,在jQuery基础上实现了Ajax功能,主要表现在日志评论加载以及用户注册上...

    php课程(共100多节)

    30:PHP模板引擎Smarty缓存应用 31:PHP在线编辑器fckeditor应用 32:PHP5中Cookie与 Session详解 33:PHP5中图片验证码的制作(上) 34:PHP5中图片中文验证码(下) 35:PHP5文字图片混合水印与缩略图 36:PHP中正...

    YIXUNCMS网站建设系统

    2.0.4.9SD版在默认的SMARTY缓存基础上引入了公共缓存机制,即使用户不开启SMARTY缓存,网站公用数据在执行时也会进行缓存,可有效减少对数据库的查询,从而提高运行效率。 特点三:管理模块调整 2.0.4.9SD版对系统...

    php188商城系统 v2.0.1.rar

    大量缓存技术,从而减轻服务器数据库负载 目前市场上权限最全的商城系统(多级管理权限控制,让网站多人维护更轻松) 模块化开发,开发更灵活 Smarty模板引擎,更贴近大众 模板函数自由调用,让模板制作更灵活 ...

    eqphp 中文开源免费TPS-MVC框架

    它是一款基于面向对象的TPS-MVC全分离式框架,由工具类、组件类、业务逻辑层—数据模型层、视图层、控制层组成,重写常用函数、类库,整合Smarty的组件类,收集升级Web项目常用类,可根据功能需求自由扩展。...

    EQPHP MVC 框架

    它是一款基于面向对象的TPS-MVC全分离式框架,由工具类、组件类、业务逻辑层—数据模型层、视图层、控制层组成,重写常用函数、类库,整合Smarty的组件类,收集升级Web项目常用类,可根据功能需求自由扩展。...

    php商城系统 V2.0.4 beta 本地测试安装包.exe

    大量缓存技术,从而减轻服务器数据库负载 目前市场上权限最全的商城系统(多级管理权限控制,让网站多人维护更轻松) 模块化开发,开发更灵活 Smarty模板引擎,更贴近大众 模板函数自由调用,让模板制作更灵活 ...

Global site tag (gtag.js) - Google Analytics