PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Smarty教程 > 正文

    smarty3从入门到精通详解(五)-缓存

    作者:admin来源:网络浏览:时间:2020-09-30 00:07:50我要评论
    导读:5、缓存5.1 开启缓存smarty默认是不开启缓存的。需要进行设置才能开启缓存。缓存状态的设置需要在display或者fetch模板之前使用。确定缓存...
    5、缓存
     

     

    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中好像不太好用了。

    转载请注明(B5教程网)原文链接:https://b5.mxunkeji.com/content-84-4976-1.html
    相关热词搜索: