smarty插件

smarty插件
    1.目录:放在Smarty类库下的plugins目录下面(默认存放的都是smarty自带的插件)
        smarty3.0提供了自定义插件目录的方式:
        $smarty->addPluginsDir(ROOT."plugins"); //自定义添加一个插件目录

    2.Smarty插件命名规则
      2.1 插件文件名命名规则
        type.name.php
        name 自定义---------------------插件名称
        type 的类型有以下几种:----------插件类型        
            1.function                --自定义函数
            2.modifier                --修改器
            3.block
            4.compiler
            5.prefilter
            6.postfilter
            7.outputfilter
            8.resource
            9.insert
        例如:modifier .date_format .php这个就是smarty自带的日期插件的文件名
      2.2 插件文件里面的函数命名规则
        smarty_type_name ()
        例如:smarty_modifier _date_format    
      2.3如果指定的插件文件不存在或文件、函数命名不合规范,Smarty会输出对应的错误信息。

    3. 添加自定义插件功能
        个人觉得modifier(修改器)和function(Smarty标签)这二种类型的插件最有用,也是最常用的。所以下面我以这二个类型来举例子
        3.1添加modifier插件
            a )./plugins(或自定义目录)下面建个文件modifier.mystyle.php        
                <?php  
                    function smarty_modifier_mystyle($var, $color, $size) {  
                         return '<font color="'.$color.'" size="'.$size.'">'. $var .'</font>';
                    }  
                ?>
                参数:函数的第一个参数会自动传入模板中要修改的变量,
                     修改器用到的其他参数从第二个参数开始声明.
            b).在模块文件文件中加入
                {$var|mystyle: "red":7}
        这样就可以改变变量值的颜色和字号大小了.


        3.2添加function插件
            a )./plugins下面建个文件function.eight_ball.php
                function smarty_function_eight_ball($params, $smarty)  {  
                    //如果某个插件依赖其它插件的某些功能(事实上,一些插件被绑定在Smarty中),那么可以通过如下方法加载需要的插件
                    //require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');  

                    $answers = array(
                                '是的',
                                '不行',
                                '没门儿',
                                '看起来不好',
                                '在回答一次',
                                '根据情况决定'
                        );
                    $result = array_rand($answers);
                    return $answers[$result];
                   
                  
                ?>
                参数:需要2个参数:
                    模板中传递给模板函数的所有属性都包含在关联数组中作为第一个参数;
                    第二个参数hi用来接收自动传入的Smarty对象,可以通过这个参数在函数中调用到Smarty对象中的成员.
                返回值:函数的输出内容(返回值)在原位置用函数标签代替      

     
            b ). 在模块文件文件中
                {* 在模中使用 eightball 函数标签:*}
                问题: 我能有时间旅行吗?
                答案:{eightball}.    
    

    4.补充说明
        4.1按照惯例,Smarty对象通常作为最后一个参数传递给插件,但有两个例外:
            1 调节器不须接受Smarty对象的传递。
            2 为了向前兼容旧版Smarty,块插件将$repeat排在Smarty对象后面作为最后一个参数($smarty作为倒数第二个参数)。

分情破爱始乱弃,流落天涯思别离。 如花似玉负情意,影如白昼暗自迷。 随风浮沉千叶落,行色匆匆鬓已稀。
原文地址:https://www.cnblogs.com/cshaptx4869/p/8011496.html