2008年12月17日星期三

smarty 插件

对于smarty 的几种不同插件 我一直都有混淆
前两日, 有个需求. 用smarty 直接在php setting里取值,并作为判断依据. 因为概念混淆,绕了些弯路,先后用了四种方法

在我的概念里  smarty是无法嵌套的, 因此首先是通过<{getconfg var="kk" value="point.policy"}> 从系统中将 poing.policy 变量取出赋值给 $kk, 然后再<{if $kk...}>...<{/if}>.

1. compiler 插件
      缺点: 1)编译型插件,必须先 删掉编译文件,不适合软件升级  2)编译型的优先级高于template function 类型的插件.
      因为编译型插件的选择, 不爽. 之后找到了解决办法 $smarty->_tpl_vars[$k], 这么简单的就解决了
     缺点: 必须先赋值, 然后才能使用.  不能够直接在 <{if ..}>..<{/if}>中使用
3.将smarty 作为积累的扩展方法
      采用第二种方法后, 舒服了不少, 可还是不爽. 于是想在  内置的 if  标签上做文章
      在smarty 类中有
    var $security_settings  = array(
                                    'PHP_HANDLING'    => false,
                                    'IF_FUNCS'        => array('array', 'list',
                                                               'isset', 'empty',
                                                               'count', 'sizeof',
                                                               'in_array', 'is_array',
                                                               'true', 'false', 'null'),
                                    'INCLUDE_ANY'     => false,
                                    'PHP_TAGS'        => false,
                                    'MODIFIER_FUNCS'  => array('count'),
                                    'ALLOW_CONSTANTS'  => false
                                   );
   IF_FUNCS 是smarty 所支持的能够在 if 中使用的函数.  在IF_FUNCS 加入一个函数 getconf
   就可以这样用了  <{if getconf("fdf")==1}>  

   缺点: 非常规做法,乖乖的
4. modifier 
   有兄弟提醒  modifier 是可以在 if 标签里套用的, md 圈子绕大了
   这样就解决了<{if $kk|getconf eq 1}>



    

没有评论: