前两日, 有个需求. 用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}>
就可以这样用了 <{if getconf("fdf")==1}>
缺点: 非常规做法,乖乖的
4. modifier
有兄弟提醒 modifier 是可以在 if 标签里套用的, md 圈子绕大了
这样就解决了<{if $kk|getconf eq 1}>
没有评论:
发表评论