Appearance
DedeCMS動(dòng)態(tài)模板引擎 ?
核心文件 ?
include/dedetemplate.class.php
功能描述 ?
用于非核心模塊的動(dòng)態(tài)頁(yè)面或列表頁(yè)的模板解析, 如:member/content_list.php ,通常是在 datalistcp.class.php 中使用,這個(gè)類(lèi)在動(dòng)態(tài)運行的情況下,由于本身是把模板編譯成PHP的,因此性能上會(huì )優(yōu)級于舊的解析類(lèi),這個(gè)方法將在未來(lái)版本中作為通用的方式。
使用方法 ?
php
$tpl = new DedeTemplate(
模板對象實(shí)例名稱(chēng),通常是'tpl',
[模板存放目錄(生成緩存時(shí)會(huì )存放在這個(gè)目錄),
include語(yǔ)法默認引用目錄]
);
通常情況下參數二和參數三是不必要的,如:
php
$tpl = new DedeTemplate('tpl');
如果在類(lèi)文件中調用,應該加上設置:
php
$this->tpl->SetObject($this);
在一些塊調用中默認將使用當前類(lèi)的成員函數。
php
$tpl->LoadTemplate(模板的物理路徑);
如果模板中帶有 {dede:config name='' value=''/}
可以在載入模板后,通過(guò) $tpl->GetConfig($name)
獲得這些變量的值。
顯示頁(yè)面或保存頁(yè)面為文件
php
$tpl->Display();
php
$tpl->SaveTo(/*物理絕對路徑的文件名*/);
標記語(yǔ)法 ?
標記通用特性 ?
短標記 ?
html
{dede:tagname.name /}
等同于
html
{dede:tagname name='' /}
塊標記 ?
html
{dede:tagname}
循環(huán)代碼...
{/dede:tagname}
標記的具體語(yǔ)法及對應的PHP代碼 ?
配置變量 ?
html
{dede:config name='' value='' /}
配置變量可以在載入模板后通過(guò) $tpl->GetConfig($name)
獲得,僅作為配置,不在模板中顯示。
短標記 ?
html
{dede:global.name /}
外部變量,等同于 <?php echo $name; ?>
html
{dede:var.name /}
var數組,等同于 <?php echo $_vars['name']; ?>
html
{dede:field.name /}
field數組,等同于 <?php echo $fields['name']; ?>
html
{dede:cfg.name/}
系統配置變量,等同于 <?php echo $cfg_name; ?>
考慮到大多數情況下都會(huì )在函數或類(lèi)中調用模板,因此 $_vars
、$fields
數組必須聲明為 global
數組,否則模板引擎無(wú)法獲得它的值從而導致產(chǎn)生錯誤。
自由調用塊標記 ?
html
{tag:blockname bind='GetArcList' bindtype='class'}
循環(huán)代碼
{/tag:blockname}
必要屬性: ?
- bind - 數據源來(lái)源函數
- bindtype - 函數類(lèi)型,默認是
class
可選為sub
- rstype - 返回結果類(lèi)型,默認是
array
,可選項為string
。
自定義函數格式必須為 function(array $atts,object $refObj, array $fields);
在沒(méi)有指定 bind
綁定的函數的情況下,默認指向 MakePublicTag($atts,$tpl->refObj,$fields)
統一管理。
固定塊標記 ?
datalist ?
從綁定類(lèi)成員函數 GetArcList
中獲取數組并輸出
html
{dede:datalist}
循環(huán)代碼
{/dede:datalist}
遍歷一個(gè)二維數組,數據源是固定的,只適用用類(lèi)調用。等同于
html
{tag:blockname bind='GetArcList' bindtype='class' rstype='arrayu'}
循環(huán)代碼
{/tag:blockname}
label ?
從綁定函數中獲取字符串值并輸出。等同于
html
{tag:blockname bind='func' bindtype='sub' rstype='string'/}
pagelist ?
從綁定類(lèi)成員函數 GetPageList
中獲取字符串值并輸出。等同于
html
{tag:blockname bind='GetPageList' bindtype='class' rstype='string'/}
include ?
html
{dede:include file='文件路徑'/}
或
html
{dede:include filename='文件路徑'/}
php ?
html
{dede:php php代碼... /}
或
html
{dede:php}
php代碼...
{/dede:php}
If ?
僅支持 if
,else
,else
直接用 {else}
表示,但不支持 {else if}
這樣的語(yǔ)法 ,一般建議模板中不要使用太復雜的條件語(yǔ)法,如果確實(shí)有需要,可以直接使用 php 語(yǔ)法。
html
{dede:if 條件}
a-block
{else}
b-block
{/dede:if}
條件中允許使用 var.name
、global.name
、 field.name
、cfg.name
表示相應的變量。
如:
html
{dede:if field.id>10 }
......
{/dede:if}
遍歷一個(gè) array數組 ?
html
{dede:array.name}
{dede:key/} = {dede:value/}
{/dede:array}
各種語(yǔ)法的具體編譯后的代碼,可查看 dedetemplate.class.php
中的 function CompilerOneTag(&$cTag)
函數。