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值来展示某一个具体的商品。如果还按照普通的缓存方法,缓存模板之后就不再从数据库取数据,假如现在正在访问id5的商品,goods.php?id=5,那么缓存的模板就是id5的商品的页面,因为不再从数据库取数据,所以当访问其他商品的时候,页面还是id5的商品页面。这样显然是不合适的。

解决该问题的思路是为同一个模板,根据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;

 

 

 

转载于:https://www.cnblogs.com/mozshaw/p/5321323.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值