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) 函數。
