Smarty缓存的5个知识点
(1)页面缓存:整个页面全局的缓存
需要4个步骤:
①开启缓存 $smarty->caching = true;
②设置缓存的生命周期 $smarty->cache_lifetime = 3600;
③设置缓存目录 $smarty->cache_dir = ‘./cache’;
④设置只有在没有缓存的时候,再从数据库取数据
if(!$smarty->isCached(‘模板名’)){
//从数据库取数据并assign赋值
}
(2)局部不缓存
在整个页面缓存的基础上,页面中会有一些部分是不能缓存、需要及时更新的。比如时间,股票信息等。所以这就需要控制局部不缓存。一共有4种方法:以在php文件中传递给模板一个时间戳为例:
<?php //省略其他代码 $smarty->assign(‘time’,time()); ?>
①单标签控制
在模板的标签中使用nocache,就可以控制该标签不缓存,如下:
{$time nocache}
②nocache标签对
在{nocache}{/nocache}标签对内的区域,都可以实现不缓存
比如 {nocache}{$time1}{$time2}{/nocache}
这样,两个标签$time1和$time2都不缓存
③在assign赋值的时候控制
php中,用assign方法向模板标签赋值的时候,第一个参数是标签名,第二个参数是值,第三个参数是可选的。如果给定第三个参数为true,则表示该标签不缓存
$smarty->assign(‘time’,$time,true);
这样模板中的{$time}标签就是不缓存的
④通过insert方法得到php中对应函数的返回值
具体语法为:在模板中的{insert name=’xxx’}的标签可以得到php文件中insert_xxx()函数的返回值。
比如:模板文件中的代码:
{insert name=’time’}
php文件中的代码:
function insert_time(){
return time();
}
这样,模板标签就可以得到对应的php中函数的返回值,为一个时间戳。而使用该方法得到的值是不缓存的。
(3)单模板多缓存
举一个例子,在商品页中,会通过url传递一个id值来展示某一个具体的商品。如果还按照普通的缓存方法,缓存模板之后就不再从数据库取数据,假如现在正在访问id为5的商品,goods.php?id=5,那么缓存的模板就是id为5的商品的页面,因为不再从数据库取数据,所以当访问其他商品的时候,页面还是id为5的商品页面。这样显然是不合适的。
解决该问题的思路是为同一个模板,根据id的不同,生成不同的多个缓存文件。具体的解决办法是--》传递缓存id。
一共有3个地方需要传递缓存id:
①display展示时,根据缓存id的不同生成不同的缓存文件
$smarty->display(‘模板名’,缓存id);
②isCached判断时,明确是判断哪一个缓存id的模板
$smarty->isCached(‘模板名’,缓存id)
(具体可以去读ecshop的代码,它就是用传递缓存id的方式来进行单模板多缓存的)
③删除缓存时,见第(4)点
(4)删除缓存
$smarty->clearCache(‘模板名’,缓存id);
如果不给第二个参数-》传递缓存id,即删除该模板下的所有缓存文件
(5)强制不缓存
在已经缓存的基础上,如果出于调试的目的,进行强制不缓存,只需要如下设置就可以了
$smarty->force_cache = true;
Smarty缓存的5个知识点的更多相关文章
- 全面剖析Smarty缓存机制二[清除缓存方法]
前段时间,写了一篇 Smaryt缓存机制的几种缓存方式 ,详细介绍了三种缓存方式:全局缓存.部分缓存.局部缓存,以及通过is_cache()判断是否存在缓存来进行缓存生成.本来这篇早该完成,由于时间关 ...
- Smarty缓存技术总结
大家应该都知道合理使用缓存能有效的减轻网站的服务器压力,php Smarty作为一个非常优秀的php模板引擎,它为我们提供了非常简单而多样化的缓存操作,下面就让我们学习一下smarty缓存操作方面的一 ...
- 全面剖析Smarty缓存机制一[三种缓存方式]
今天主要全面总结下Smarty模板引擎中强大的缓存机制,缓存机制有效减少了系统对服务器的压力,而这也是很多开发者喜欢Smarty的原因之一,由于篇幅较大,便于博友阅读,这篇文章将剖析Smarty缓存的 ...
- php smarty 缓存和配置文件的基本使用方法
smarty高级部分包括缓存机制和配置文件的调用 下面是代码实现: 文件一,配置文件: #全局变量 title="网站主页" content="一个网站的主体部分&quo ...
- smarty缓存的使用
<?php require './smarty/Smarty.class.php'; $sm = new Smarty; //$sm->force_compile = true; $sm- ...
- 命名空间namespace、smarty使用(视图分离,MVC)、smarty模板语法、smarty缓存、MVC模式
一.命名空间:namespace 命名空间 可以理解为逻辑上的使用,为了防止重名 namespace :关键字 加载:require_once();//加载一次 include_once() 申明命名 ...
- smarty缓存控制
第一步初始化配置文件中设置 如果当前访问的模板有缓存就不需要连接数据库那些代码了,如果要模板局部不缓存,要写在iscache外,模板中用{nocache}
- smarty缓存技术
后台: <?php //要求:当存在缓存文件,直接输出,不存在缓存文件,自己创建缓存,输出 //步骤: //定义该页面存放缓存文件的路径 $filename="../../cache/ ...
- smarty缓存函数
原来在Smarty中在3.0以上版本中不在使用这个clear_all_cache(),而是以$smarty->clearAllCache(); 代替.其中$smarty->clear_ca ...
随机推荐
- 分支合并git checkout adview git merge adview3
分支合并 git checkout adview git merge adview3
- 循序渐进Python3(十)-- 2 -- SqlAlchemy
ORM 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类 ...
- jenkins入门
look at http://www.cnblogs.com/itech/archive/2011/11/23/2260009.html
- IT学习网站集结
IT的学习网站: 慕课网 http://www.imooc.com 51CTO http://www.51cto.com/ CSDN http://www.csdn.net/ 极客 ...
- js- this
this对象是基于函数在执行的环境绑定的. (一) this 在闭包环境中指向的对象. <Js高级程序设计>中提到: 每个函数在被调用时,其活动对象都会自动取得两个特殊变量:this和 ...
- Linux下查看IP的命令:ifconfig -a
按照指南实践,在NFS挂载测试和tftp服务器架设时,均需用到本机的IP地址,怎么查看呢? 很简单,键入命令:ifconfig -a 这个命令具体是怎么定义的呢?有时间再查阅,先跑遍指南.
- 使用HttpClient 4.3.4 自动登录并抓取中国联通用户基本信息和账单数据,GET/POST/Cookie
一.什么是HttpClient? HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 ...
- es6新特性(一)
关于es6,阮一峰的<ECMAScript 6入门> http://es6.ruanyifeng.com/写的非常详尽,可以经常看看,这里是对这本书进行一个缩略,可能有误,欢迎大家纠正.
- Git查看、删除、重命名远程分支和tag(转)
转:http://zengrong.net/post/1746.htm 这篇文章记录我在使用git的过程中碰到远程分支和tag的相关内容,提纲: 查看远程分支 删除远程分支和tag 删除不存在对应远程 ...
- 微信App支付通知验签
微信异步通知: [AcceptVerbs("POST")] public void Notify() { //编码(101-登录无效,102-账号无效,200-成功,201-失败, ...