如果项目需要自定义smarty插件,把它存放在 library/smarty_plugins 目录,而不要存放在其它地方,以便我们开发时能快速查找对应标签的代码。
1、block 块插件
对应的文件是“插件目录/block.name.php”
表示:
<{name att1=a att2=b ...}>
不支持标签的文本
<{/name}>
这样的代码
2、compiler 插件
对应的文件是“插件目录/compiler.name.php”
这种插件对属性里的变量不会预先编译,属于比较接近底层的一种插件,但它默认的情况是不能直接使用{tag}{/tag}这样的标签的,否则{/tag}这里会报错。
3、function 自由定义函数的插件
对应的文件是“插件目录/function.name.php”
表示:
<{function att1=a att2=b ...}>
形式的标签
4、modifier 输出内容修正插件
对应的文件是“插件目录/modifier.name.php”
实际上这种插件和function是类似的,只是写法不同,它的写法即是
{$var|function}
其实和
{function att=$var}
是类似的,写法上更简洁
5、myblock 标签
对应的文件是“插件目录/myblock.name.php”
这是94hwan框架中自行增加了一种特殊的block标签,它与普通的block不同之处是中间的文本部份也支持嵌套标签,用途比较广泛。
为了防止和普通的block标签相冲突,标签需用下面前缀之一来命名:cms_、lurd_、my_
示例:
- function smarty_myblock_lurd_list($_params, &$compiler)
- {
- if( empty($compiler->_tpl_vars['lurd']) && emptyempty($_params['datas']) )
- {
- return array();
- }
- if( !empty($_params['datas']) )
- {
- return $_params['datas'];
- }
- else
- {
- return $compiler->_tpl_vars['lurd']->datas;
- }
- }
它对应的smarty标签为:
<{lurd_list item='v' key='key' }>
<{$key}>:<{$v.f1}>--<{$v.f2}>...<br />
<{/lurd_list}>
这种标签有点类似 foreach 语法,不同之处是它通过标签函数负责输出要循环的数组,而不是通过assign指定,这在较大项目的通用模板调用中是十分有用的。
6、被移除的变量及替换方法
smarty.env、smarty.get、smarty.post、smarty.request
smarty.env 没有可替代方法,可以考虑用相关函数或smarty.server相同的东西替代
smarty.get、smarty.post、smarty.request 说明:
注:禁止使用这些变量的原因是,直接在前台输出用户直接请求的变量,很容易引起XSS漏洞,因此严禁这样操作,如果一定要输出的,先自行对要输出的变量进行assign,并且务必注意需要过滤HTML或进行数据类型检查,不要为了方便而自行简化。
此外增加了变量:smarty.global 有必要可以用这个数组获取一些的数据。
|