5.1 开启缓存
smarty默认是不开启缓存的。需要进行设置才能开启缓存。缓存状态的设置需要在display或者fetch模板之前使用。
确定缓存目录是否存在,是否具有足够的权限,设置缓存目录查看3.4。
$smarty->getCaching() #检查当前是否开启了缓存
$smarty->setCaching(true) #开启缓存
$smarty->isCached($template, $cache_id = null, $compile_id = null)
#检查指定条件的模板文件(名称/缓存id/编译id)是否被缓存(有缓存文件,且在缓存有效时间内)
$smarty->setcache_lifetime(60); #设置当前的缓存时间
$smarty->getcache_lifetime(); #获得当前的缓存时间,默认是3600(1个小时)
$smarty->display/fetch(模板名,缓存名=null,编译名=null,父模板名=null)
运行display/fetch就会在缓存目录中产生缓存文件。再次访问时,只要存在该缓存文件,
且在缓存文件的生命周期之内就会直接调用该缓存文件,而不需要重新编译。
$smarty->cache->clearAll($exp_time = null, $type = null) #清除所有缓存文件,
$exp_time指定一个以秒为单位的最小时间,超过这个时间的缓存都将被清除掉
$smarty->cache->clear($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null) #清除指定条件的缓存文件
可以单设某个条件或者组合多个条件删除多个缓存文件,比如
$smarty->cache->clear($template_name) #清除名称为template_name的所有缓存文件
$smarty->cache->clear(null, null, $compile_id) #清除编译id为compile_id的所有缓存文件
$smarty->cache->clear(null, $cache_id = null, $compile_id)
#清除缓存id为cache_id且编译id为compile_id的所有缓存文件
5.2 局部不缓存
缓存是一种高效访问的理想方式,但是对整个页面进行缓存的时候,
有时候局部的一些元素不希望被缓存,比如时间、实时变化的信息等。
局部缓存有几种方法。
1、nocache属性
$smarty->assign/append($tpl_var, $value = null, $nocache = true …)
#中规定nocache = true,则模板中该变量各处均不缓存
{$foo nocache=true} #不管前面如何设置,则该处变量被缓存
{time() nocache} #函数也可以,nocache等同于nocache=true
模板中声明的变量和配置文件分配的变量不使用nocache,因为要改变他们的值,
需要编辑模板和配置文件,因为模板文件和配置文件修改就会重新生成缓存文件。
2、insert函数
Insert内部不受缓存影响,但是如果给insert传参,请确保参数不被缓存,详情查看4.4.7
3、{nocache}…..{/nocache}
代码块不缓存。代码块中可以放入变量和自定义模板函数,自定义函数的定义部分代码可以不放入,
但是调用代码必须放入,否则会缓存。insert函数不起作用。
5.3 单页面多缓存
有时候,我们希望单个页面有多个缓存页面。比如index?id=1和index?id=2可能页面内容不同,
希望分别保存在不同的缓存文件中,所以这里我们需要设定cache_id。
例子:Index.php
if(empty($_GET['id']))$_GET['id'] = null;
$smarty->assign(‘name’,’韩灵稚1′.$_GET['id']);
$smarty->display(‘templates/t3.tpl’,$_GET['id'],$_GET['id']);
这样为每个由id值创建的网页都生成对应缓存文件,当id无值时(index.php),
直接生成一个缓存文件(名称),当id=1时(index.php?id=1),将生成另一个缓存文件(1^名称)。
5.4 缓存集合
实际上是多个值的不同组合换来的不同页面,比如index.php?id=2&sid=3,没种组合可能产生不同的页面结果。
最开始可以使用连接字符串使id和sid的值连接,理论上将也不会出现重复,
但是会出现这种情况index.php?id=23,是不是和上面的值一样呢。为了避免这种情况,可以使用缓存集合。
if(empty($_GET['id']))$_GET['id'] = null;
if(empty($_GET['sid']))$_GET['sid'] = null;
$smarty->assign(‘name’,’韩灵稚1′.$_GET['id']);
$smarty->display(‘templates/t3.tpl’,$_GET['id'].’|’.$_GET['sid']); #两个变量之间用”|”隔开,
共同组成cache_id.有几个变量最终文件名就有几个”^”,如果变量为空,则只有一个”^”
从php的安全考虑,对于传过来的值要进行校验,去掉危险的字符。
5.5 缓存处理函数
smarty允许自己定义缓存读、写和清除的方法,
比如不想用文件的形式进行缓存处理可以写一个有mysql进行缓存读、写和清除的方法。
$smarty->Cache_handler_func=‘自定义函数名称’
在3.0中好像不太好用了。