这篇文章主要介绍DEDECMS静态模板类类文件指的是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
<强> DEDECMS静态模板类类文件是什么? 强>
静态模板类类文件织梦模板引擎是一种使用XML名字空间形式的模板解析器
使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。
包括/dedetag.class。php这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式php代码,二次执行)
一、模板语法
1,织梦模板引擎的代码样式有如下几种形式:
{黛德:标记名称属性=& # 39;值& # 39;/}
{黛德:标记名称属性=& # 39;值& # 39;}{/黛德:标记名称}
{黛德:标记名称属性=& # 39;值& # 39;}自定义样式模板(InnerText)实现{/黛德:标记名称}
提示:
如果使用带底层模板的标记,必须严格用{黛德:标记名称属性=& # 39;值& # 39;}{/黛德:标记名称}这种格式,否则会报错。
2,织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。
(1)全球标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:
{黛德:全局名称=& # 39;变量名称& # 39;}{/黛德:全球}
或
{黛德:全局名称=& # 39;变量名称& # 39;/}
其中变量名称不能加美元符号,如变量cfg_cmspath美元,应该写成{黛德:全局名称=& # 39;cfg_cmspath& # 39;/}。
(2) foreach用来输出一个数组,形式为:
{黛德:foreach数组=& # 39;数组名称& # 39;}[:键/][字段:值/]{/黛德:foreach}
(3)包括引入一个文件,形式为:
{黛德:包含文件=& # 39;文件名称& # 39;ismake=& # 39;是否为黛德板块模板(yes/no) & # 39;/}
对文件的搜索路径为顺序为:绝对路径,包括文件夹,CMS安装目录,CMS主模板目录
3,织梦标记允许在任何标记中使用函数对得到的值进行处理,形式为:
{黛德:标记名称属性=& # 39;值& # 39;函数=& # 39;youfunction(“参数一“,“参数二“,“@me") & # 39;/}
其中@me用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:
{黛德:字段名称=& # 39;作用# 39;函数=& # 39;strftime (“% Y - % m - H % d %: % m: % S",“@me") & # 39;/}
4,织梦标记允许有限的编程扩展。
格式为:
代码如下:
{黛德:tagname runphp=& # 39;是的# 39;} aaa美元=@me; @me=?23456”; {/黛德:tagname}
@me表示这个标记本身的值,因此标记内编程是不能使用回声之类的语句的,只能把所有返回值传递给@me。
此外由于程序代码占用了底层模板InnerText的实现内容,因此需编程的标记只能使用默认的InnerText。实现
二、解析方式
在dedetag.class。php里面有四个类
类DedeAttribute属性结构表述
类DedeAttributeParse属性解析器
类DedeTag标签结构表述
类DedeTagParse标签解析器
使用解析类解析模板时一般经过下面的步骤
1,初始化:
dtp美元=new DedeTagParse ();
2,载入模板/模板字符串:
dtp→美元LoadTemplate(模板文件(绝对路径));//会生成缓存,第二次不需解析模板
或
dtp→美元LoadSource(字符串);
3,给标签赋值
foreach (dtp→美元CTags tid美元=祝辞ctag美元){
//判断ctag的名称和属性,并给赋不同的值,通常用函数处理
if ($ ctag→GetName==& # 39; mytag& # 39;)美元dtp→分配(tid美元,mytagvalue (ctag美元));
}
在上面例子中,直接把名称为mytag的标签转交给mytagvalue函数处理,mytagvalue里判断ctag美元的各个属性,返回不同内容即可。
在V5.3版本中,通常除了字段列表等专用标签之外,凡弧。*开头的类解析的文件,标签都是对应该包括/taglib的源码的,这个由系统进行了自动的映射。
4,显示或保存为HTML
dtp→美元显示();
或
dtp→美元SaveTo(静态文件名),
对于二次开发人员而言,不大需要知道dedecms模板具体解析方式,不过应该十分清楚CTag这个类的结构,从而判断标签不同属性进行处理。
代码如下:
类DedeTag { var IsReplace美元=FALSE;//标记是否已被替代,供解析器使用 var $ TagName=?“;//标记名称 var美元InnerText=?实现“;//标记之间的文本 var StartPos美元=0;//标记起始位置 var EndPos美元=0;//标记结束位置 var $ CAttribute=?“;//标记属性描述,即DedeAttribute是类 var TagValue美元=https://www.yisu.com/zixun/";//标记的值 var TagID美元=0;//获取标记的名称和值 GetName()函数 { 函数返回$ this -> TagName); } GetValue()函数 { 返回$ this -> TagValue; }//下面两个成员函数仅是为了兼容旧版 GetTagName()函数 { 函数返回$ this -> TagName); } GetTagValue()函数 { 返回$ this -> TagValue; }//获取标记的指定属性 函数IsAttribute (str)美元 { 返回$ this -> CAttribute -> IsAttribute (str); } 函数GetAttribute (str)美元 { 返回$ this -> CAttribute -> GetAtt (str); } 函数GetAtt (str)美元 { 返回$ this -> CAttribute -> GetAtt (str); } GetInnerText()函数 { 返回$ this -> InnerText;实现 } }DEDECMS静态模板类类文件指的是什么