| 
         如果项目需要自定义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  有必要可以用这个数组获取一些的数据。 
 
  
         |