DEDECMS教程之静态模板类类文件
使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。
include/dedetag.class.php这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行)
一、模板语法
1、织梦模板引擎的代码样式有如下几种形式:
{dede:标记名称 属性='值'/}
{dede:标记名称 属性='值'}{/dede:标记名称}
{dede:标记名称 属性='值'}自定义样式模板(InnerText){/dede:标记名称}
提示:
如果使用带底层模板的标记,必须严格用{dede:标记名称 属性='值'}{/dede:标记名称} 这种格式,否则会报错。
2、织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。
(1) global 标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:
{dede:global name='变量名称'}{/dede:global}
或
{dede:global name='变量名称'/}
其中变量名称不能加 $ 符号,如变量 $cfg_cmspath ,应该写成 {dede:global name='cfg_cmspath'/} 。
(2) foreach 用来输出一个数组,形式为:
{dede:foreach array='数组名称'}[field:key/] [field:value/]{/dede:foreach}
(3) include 引入一个文件,形式为:
{dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/}
对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录
3、织梦标记允许在任何标记中使用函数对得到的值进行处理,形式为:
{dede:标记名称 属性='值' function='youfunction("参数一","参数二","@me")'/}
其中 @me 用于表示当前标记的值,其它参数由你的函数决定是否存在,例如:
{dede:field name='pubdate' function='strftime("%Y-%m-%d %H:%M:%S","@me")'/}
4、织梦标记允许有限的编程扩展。
格式为:
复制代码
代码如下:
{dede:tagname runphp='yes'}
$aaa = @me;
@me = "123456";
{/dede:tagname}
@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.IT之家开头的类解析的文件,标签都是对应该 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;
}
}
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jz/dedecms/8606.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
织梦友情链接调用和图片
时间:2020-12-29
-
dedecms织梦会员登录二级域
时间:2020-12-29
-
织梦cms手机站首页不更新
时间:2020-12-29
-
织梦DEDECMS提示信息提示框
时间:2020-12-24
-
使用织梦cms做多语言的网
时间:2020-12-24
-
织梦去掉上传图片的水印
时间:2020-12-24
-
DedeCMS Error:Tag disabled:"p
时间:2020-12-24
-
DEDECMS图文分离存放在另一
时间:2020-12-24
热门文章
-
DedeCMS站点高级安全策略(Linux篇)
时间:2020-12-16
-
阿里云主机安装织梦系统出现data无写入权
时间:2020-12-17
-
织梦教程:织梦怎么整合Discuz站点
时间:2020-12-14
-
织梦批量删除文章内容数据库里所有超链
时间:2020-12-17
-
织梦dedecms系统UTF8版编辑器中多图发布按
时间:2020-12-16
-
织梦更换UEditor编辑器后栏目内容、单页无
时间:2020-12-17
-
织梦关键词自动添加链接设置方法
时间:2020-12-15
-
如何防止别人盗用你的织梦模板
时间:2020-12-14
-
织梦dedecms熊掌号时间因子改造教程
时间:2020-12-13
-
DedeCms织梦系统后台把某篇文章设置置顶
时间:2020-12-15
