2010/07/22 1833 Views
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=http://www.grzz.com.cn/cms/dede/199/""; //标记的值
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;
}
}
Leave a comment