Smarty学习笔记二:cache与plugin

1.cache缓存

   smarty编译后会在cache文件夹下生成临时文件

   使用cache可以跳过读取数据,编译模板,直接显示画面

   $smarty->caching = 0              ; //不使用缓存(1:使用, 2:使用但是有期限)

   $smarty->cache_lifetime = 60      ; //设置期限(1分钟)

   $smarty->is_cached('test.tpl')    ; //可获知文件是否被缓存

   $smarty->clear_cache('test.tpl')   ; //清除特定文件的缓存

   $smarty->clear_all_cache()        ; //清除所有缓存

   注:include,diplay,fetch中使用的模板也会使用缓存


2.plugin插件

   smarty支持自定义的插件。

   插件的类型分为:

  function,modifier,block,compiler,prefilter,postfilter,outputfilter,resource,insert

   插件有3种定义方法

   1)用register_function, register_modifier...注册插件,可以使用任意自定义函数(insert不支持)

   2)定义插件文件,需要生成插件文件(insert不支持)

   3)insert插件,只需要定义函数,但必须以insert_开头(只有insert)


3.insert插件

    1)PHP文件定义函数:

    function insert_getSidemenu($params, $smarty)
    {
          $smarty->assign('title', $params['title']);
          return $smarty->fetch('sidemenu.tpl');

          //或者直接 return "<div>...</div>"
    }

    2)模板文件调用:

    {insert name="getSidemenu" title="标题"}

    注:insert插件与include相似,比include更加灵活,include只能加载模板,insert可以用模板或者HTML代码


4.function插件(此处定义插件文件,也可以使用register)

    1)设定插件目录

        $smarty->plugins_dir[] = '.../smarty/plugins';

    2)在插件目录下生成php文件,注意开头为functon.

        function.yourplugin.php

    3)在文件里定义函数 smarty_function_yourplugin

        前面必须以smarty_function_开头,后面的yourplugin要与文件名中的一致

        function smarty_function_yourplugin($params, &$smarty)
        {

            $width = $params['width'];
            $height = $params['height'];

            return <<<EOD
                   <object height="{$height}" width="{$width}">
                   </object>
                   EOD;
          }

     4)调用插件

         {yourplugin width=800 height=600}

         此处的width,height为函数 smarty_function_yourplugin中使用的变量


5.使用过滤插件filter(此处使用register,也可以生成插件文件prefilter.myPrefilter.php)

    smarty有3种过滤插件,过滤器处理编译中的中间代码,比如替换字符串。

    前过滤器,后过滤器,输出过滤器,它们分别在PHP编译前,编译后,页面显示前被调用。

    如何使用过滤器(下面这个过滤器会去除模板文件中所有注释):

    1)定义过滤器使用的函数

         function myPrefilter($tpl_source, $smarty)
         {
              // 去除注释
              return preg_replace('/\{\*.+\*\}/sU', '', $tpl_source);
          }

    2)注册过滤器:

        $smarty->register_prefilter('myPrefilter');


6.modifier插件

    与function相似,function需要返回值,modifier没有返回

    使用插件文件的话:modifier.yourplugin.php定义函数smarty_modifier_yourplugin


7.block插件(简单实例)

    1)插件文件block.repeat.php

    function smarty_block_repeat($params, $content, &$smarty, &$repeat)
    {
        if ($content)
        {
            $ret = "";
            for ($i=0; $i<$params['count']; $i++)
            {
                $ret .= $content;
           }
            return $ret;
        }
    }

    2)模板调用

    {repeat count=3}
     #################<br />
    {/repeat}

    3)输出为

    #################
    #################
    #################


8.compiler插件(简单实例)

    1)插件文件compiler.tplheader.php

    function smarty_compiler_tplheader($tag_arg, &$smarty)
    {
        return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';";
    }

    2)模板调用

    {tplheader}

    3)输出为

    echo 'index.tpl compiled at 2012-12-12 12:12';


9.resource插件(简单实例resource.db.php
    <?php
    /*
     * Smarty plugin
     * -------------------------------------------------------------
     * File:     resource.db.php
     * Type:     resource
     * Name:     db
     * Purpose:  从db取出模板
     * -------------------------------------------------------------
     */
     function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
     {
         $tpl_source = "This is the template text";
         // 成功取得模板,则返回TRUE
         return true;
      }

      function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
      {
         $tpl_timestamp = time();
         // 成功取得时间,则返回TRUE
         return true;
      }

      function smarty_resource_db_secure($tpl_name, &$smarty)
      {
         // 检查安全性
         return true;
      }

      function smarty_resource_db_trusted($tpl_name, &$smarty)
      {
          // 能否信用

          return true;
      }
      ?>  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

miosde

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值