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 有必要可以用這個數組獲取一些的數據。

 

...