94hwan-PHP框架基本原理

Source:94hwan 与众不同  Author:网络部
2011-09-26 11:46

如果项目需要自定义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_
示例:

  1. function smarty_myblock_lurd_list($_params, &$compiler
  2.     if( empty($compiler->_tpl_vars['lurd']) && emptyempty($_params['datas']) ) 
  3.     { 
  4.         return array(); 
  5.     } 
  6.     if( !empty($_params['datas']) ) 
  7.     { 
  8.         return $_params['datas']; 
  9.     } 
  10.     else 
  11.     { 
  12.         return $compiler->_tpl_vars['lurd']->datas; 
  13.     } 

它对应的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 有必要可以用这个数组获取一些的数据。

 

...