@me 表示這個標記本身的值,因此標記內編程是不能使用echo之類的語句的,只能把所有返回值傳遞給@me。
此外由于程序代碼占用了底層模板InnerText的內容,因此需編程的標記只能使用默認的InnerText。
二、解析方式
在 dedetag.class.php 里面有四個類
class DedeAttribute 屬性結構表述
class DedeAttributeParse 屬性解析器
class DedeTag 標簽結構表述
class DedeTagParse 標簽解析器
使用解析類解析模板時一般經過下面的步驟
1、初始化:
$dtp = new DedeTagParse();
2、載入模板/模板字符串:
$dtp->LoadTemplate(模板文件(絕對路徑)); //會生成緩存,第二次不需解析模板
或
$dtp->LoadSource(字符串);
3、給標簽賦值
foreach($dtp->CTags as $tid=>$ctag) {
//判斷ctag的名稱和屬性,并給賦不同的值,通常用函數處理
if($ctag->GetName=='mytag') $dtp->Assign($tid, mytagvalue($ctag) );
}
在上面例子中,直接把名稱為 mytag的標簽轉交給 mytagvalue 函數處理,mytagvalue 里判斷$ctag的各個屬性,返回不同內容即可。
在 V5.3版本中,通常除了field、list等專用標簽之外,凡arc.*開頭的類解析的文件,標簽都是對應該 include/taglib 的源碼的,這個由系統進行了自動的映射。
4、顯示或保存為HTML
$dtp->display();
或
$dtp->SaveTo(靜態文件名);
對于二次開發人員而言,不大需要知道dedecms模板具體解析方式,不過應該十分清楚CTag這個類的結構,從而判斷標簽不同屬性進行處理。
代碼如下:
class DedeTag
{
var $IsReplace=FALSE; //標記是否已被替代,供解析器使用
var $TagName=""; //標記名稱
var $InnerText=""; //標記之間的文本
var $StartPos=0; //標記起始位置
var $EndPos=0; //標記結束位置
var $CAttribute=""; //標記屬性描述,即是class DedeAttribute
var $TagValue=""; //標記的值
var $TagID = 0;
//獲取標記的名稱和值
function GetName()
{
return strtolower($this->TagName);
}
function GetValue()
{
return $this->TagValue;
}
//下面兩個成員函數僅是為了兼容舊版
function GetTagName()
{
return strtolower($this->TagName);
}
function GetTagValue()
{
return $this->TagValue;
}
//獲取標記的指定屬性
function IsAttribute($str)
{
return $this->CAttribute->IsAttribute($str);
}
function GetAttribute($str)
{
return $this->CAttribute->GetAtt($str);
}
function GetAtt($str)
{
return $this->CAttribute->GetAtt($str);
}
function GetInnerText()
{
return $this->InnerText;
}
}