dedecms二次开发:dedetag.class.php 静态模板类

dedecms二次开发目录点这个:dedecms二次开发教程目录

类文件

include/dedetag.class.php

这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行)

一、模板语法

织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。

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.*开头的类解析的文件,标签都是对应该 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;
    }
}  
时间: 2024-08-07 20:19:37

dedecms二次开发:dedetag.class.php 静态模板类的相关文章

dedecms二次开发:dedesql.class.php 数据库类

dedecms二次开发目录点这个:dedecms二次开发教程目录 系统会自动载入 dedesql.class.php 文件,并用 $dsql = $db = new DedeSql(false); 进行初始化数据库连接,因此在工程所有文件中均不需要单独初始化这个类,可直接用 $dsql 或 $db 进行操作,为了防止错误,操作完后不必关闭数据库. 常用的方法: 1.执行一个非查询类型的SQL语句,如 insert .create .update 等 $rs = $db->ExecuteNoneQ

dedecms二次开发:dedetemplate.class.php 动态模板类

dedecms二次开发目录点这个:dedecms二次开发教程目录 核心类文件 include/dedetemplate.class.php 用途:用于非核心模块的动态页面或列表页的模板解析,如:member/content_list.php ,通常是在 datalistcp.class.php 中使用,这个类在动态运行的情况下,由于本身是把模板编译成PHP的,因此性能上会优级于旧的解析类,这个方法将在未来版本中作为通用的方式. 一.使用方法: $tpl = new DedeTemplate( 模

WeCenter二次开发教程(一):熟悉模板结构

<1>程序文件目录介绍: app – 应用目录 models – 模型目录 plugins – 插件目录 static – 静态文件 system – 系统目录 views – 模板目录 我们简单的页面二次开发主要还是关注static和views这两个文件. 下面在介绍一下这个文件里面对应的目录功能 static里面文件分别是: admin: 后台控制面板的css,js,图片这些文件: common: 网站公用的图片,比如社区默认的头像图片: css:主要介绍css/default里的css文

DEDEcms二次开发数据表参数

1.程序核心程序目录及简介 /include目录    程序核心目录 config_base.php 环境定义文件.用于检测系统环境,定义工作目录,保存数据库链接信息,引入常用函数等,建议不要修改. config_hand.php 系统配置文件.定义系统常用的配置信息定义,可从后台管理直接生成该文件. config_passport.php 通行证文件 config_rglobals.php 检测系统外部变量 config_rglobals_magic.php 同上 inc_archives_v

dedecms二次开发标签总结

1.获取所有的顶级栏目列表带链接: {dede:channel type='top' row='8' currentstyle='<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"} <li><a href='[field:typelink/]'>[field:typename/]</a></li> {/dede:channe

dedecms二次开发

安装遇到的问题 修改文件如下 1.date目录下的config.cache.bak.php改成config.cache.php 2install目录下的index.html.install_lock.txt文件删除 ,修改index.php.bak.module-install.php.bak改为index.php.module-install.php 原文地址:https://www.cnblogs.com/caocaoa/p/10773472.html

Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形

1  概述 临时图形Rubberband主要用于高亮显示.交互绘制等情况下.2 原理 临时图形是在一个底色透明的图层(顶层)上,添加已有的几何元素或者创建一个几何元素(临时图形),可以设置相应的样式,并在图层的最上层叠加显示.3 使用方法 QgsRubberBand用于显示临时图形.可以显示点.线.面等所有类型.由于在交互绘制时,可能需要高亮显示节点,所以本类也可以设置不同的IconType来显示不同的节点样式(只能在点类型时起作用). 生成对象后可以完成操作所有的属性,如几何元素.样式等. s

开源系统_二次开发(转)

转自http://www.phpchina.com/portal.php?mod=view&aid=40204, 更多详细资料请参看原文 最好最实用的二次开发教程 ◆二次开发 什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一 般来说都不会改变原有系统的内核. 为什么要二次开发? 随着信息化技术的不断发展,IT行业涌现出了一系列优秀的开源作品,其作者或是个人,或是项目小组,或 是软件公司.选择和应用这些优秀的开源软件,并在此基础上进行

最好最实用的PHP二次开发教程

◆二次开发 1.什么是二次开发? 二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核. 2.为什么要二次开发? 随着信息化技术的不断发展,IT行业涌现出了一系列优秀的开源作品,其作者或是个人,或是项目小组,或是软件公司.选择和 应用这些优秀的开源软件,并在此基础上进行符合业务需求的二次开发,将给企业节省信息化成本(时间成本及开发成本)的同时,更能带来技术上的保障.这就是 我们常听的:站在巨人的肩膀上,你将看的更远.所以国内