DedeCMS系统模板标签学习笔记

织梦模板设计师

初级:能够对模板进行修改,例如:元素布局、调用内容等。需要掌握基本的HTML,图形图像处理技术,同时需要对织梦的常用标签有大致的了解。
中级:能够根据设计稿输出页面、嵌套标签,并能够灵活调用DedeCMS内容。需要熟练掌握Div+CSS、Javascript,DedeCMS的模板标签用法,同时需要有一些基本的PHP、MySQL尝试。
高级:能够独立设计网站界面,并能够输出页面、嵌套标签,同时能够根据自己需求扩展编写自己需要的标签以达到站点所需效果。需要熟练掌握图形图像网页设计相关技术、PHP、Javascitpt(jQuery)、织梦模板引擎。


模板制作流程

模板文件及目录结构

模板目录

系统的模板目录在系统根目录下的templets内,下面是模板目录的文件目录结构。

模板根目录 :/templets
一级子目录:default(默认模板)、lurd(lurd系统模板)、plus(插件模板目录)、system(系统底层模板目录)、wap(wap模块模板目录)
二级子目录在default目录下:images(图片)、js(脚本)、style(样式表)
三级子目录在images目录下:mood、photo

示意图:ml

模板文件与功能说明

DedeCMS系统的模板是非固定的,用户可以在新建栏目时可以自行选择栏目模板,官方仅提供最基本的默认模板,即是内置系统模型的各个模板。
由于DedeCMS支持自定义频道模型,用户自定义新频道模型后,还需要按该模型的字段设计一套新的模板。
此外,DedeCMS也支持使用风格的形式使用模板,默认风格是 default,它表示系统默认使用{cmspath}/templets/default 这个文件夹的模板.
如果你下载了一套新的模板,你可以不必要删除 default 原有的文件,把下载的模板文件夹命名你想要的风格名称
如 style2 等,然后在后台修改了默认的模板风格名称为style2
那系统将使用{cmspath}/templets/style2 这文件当作默认模板,但是若你手工指定了栏目模板的位置,则后台参数风格的定义无效。

1、概念,设计和使用模板

板块(封面)模板:
指网站主页或比较重要的栏目封面频道使用的模板,一般用“index_识别ID.htm”命名,例如:index_index.htm(首页模板)
此外,用户单独定义的单个页面或自定义标记,也可选是否支持板块模板标记,如果支持,系统会用板块模板标记引擎去解析后才输出内容或生成特定的文件。
列表模板:
指网站某个栏目的所有文章列表的模板,一般用 “list_识别ID.htm” 命名。例如:list_image.htm(内容类型为图片集的栏目默认列表模板。)
档案模板:
表示文档查看页的模板,如文章模板,一般用 “article_识别ID.htm” 命名。例如:article_article.htm (文章详情查看页模板)
其他模板:
一般系统常规包含的模板有:主页模板、搜索模板、RSS、JS编译功能模板等,此外用户也可以自定义一个模板创建为任意文件。


2、命名规则

模板保存位置:
模板目录:{cmspath} /templets/样式名称(英文,默认为default,其中system为系统底层模板,plus为插件使用的模板)/具体功能模板文件}
模板命名规范:
① index_识别ID.htm:表示板块(栏目封面)模板;
② list_识别ID.htm:表示栏目列表模板;
③ article_识别ID.htm:表示内容查看页(文档模板,包括专题查看页);
④ search.htm:搜索结果列表模板;
⑤ index.htm:主页模板;

[识别ID]可以在“频道模型管理”的地方获得,当然,你也可以在“频道模型管理”的地方确定某个频道的模板命名。

其他模板

默认底层模板:templets/system  功能:在没有指定标记的默认底层模板的时候,系统将自动调用这个文件夹的相应文件作为底层模板。
插件目录模板:templets/plus  功能:评论、友情链接、RSS地图等模板。
会员后台模板:member/templets  功能:会员后台的模板。
系统后台模板:dede/templets  功能:系统后台管理的模板


模板引擎介绍

静态模板引擎

核心文件:include/dedetag.class.php
描述:DedeCMS V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的。注:编译式是通过获得标签位置进行内容替换,编译式是直接解析为PHP代码,二次执行。
语法:

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

A、织梦模板引擎的代码样式 :

{dede:标记名称 属性='值'/}
{dede:标记名称 属性='值'}{/dede:标记名称}
{dede:标记名称 属性='值'}自定义样式模板(InnerText){/dede:标记名称}

注:如果使用带底层模板的标记,必须严格用{dede:标记名称 属性='值'}{/dede:标记名称} 这种格式,否则会报错。

B、织梦模板引擎的代码样式 :

内置系统标记:

① global 标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数
形式为:{dede:global name='变量名称'}{/dede:global}或者{dede:global name='变量名称'/} 其中变量名称不能加$符号,如变量$cfg_cmspath,应该写成{dede:global name='cfg_cmspath'/}。

②foreach 用来输出一个数组,
形式为: {dede:foreach array='数组名称'}[field:key/] [field:value/]{/dede:foreach}

③include 引入一个文件
{dede:include file='文件名称' ismake='是否为dede板块模板(yes/no)'/} 对文件的搜索路径为顺序为:绝对路径、include文件夹,CMS安装目录,CMS主模板目录

自定义函数使用:
{dede:标记名称 属性='值' function='youfunction("参数一","参数二","@me")'/}
其中 @me 用于表示当前标记的值,其它参数由你的函数决定是否存在
例如:{dede:field name='pubdate' function='strftime("%Y-%m-%d %H:%M:%S","@me")'/}

织梦标记允许有限的编程扩展:
{dede:tagname runphp='yes'}
$aaa = @me;
@me = "123456";
{/dede:tagname}
@me 表示这个标记本身的值,因此标记内编程是不能使用echo之类的语句的,只能把所有返回值传递给@me。 此外由于程序代码占用了底层模板InnerText的内容,因此需编程的标记只能使用默认的InnerText。

动态模板引擎

核心文件:include/dedetemplate.class.php
描述:用于非核心模块的动态页面或列表页的模板解析
如:member/content_list.php ,通常是在 datalistcp.class.php 中使用,这个类在动态运行的情况下,由于本身是把模板编译成PHP的,因此性能上会优级于旧的解析类,这个方法将在未来版本中作为通用的方式。
使用方法:

$tpl = new DedeTemplate(
模板对象实例名称,通常是'tpl',
[模板存放目录(生成缓存时会存放在这个目录),
include语法默认引用目录]
);

通常情况下参数二和参数三是不必要的,如:
$tpl = new DedeTemplate('tpl');
如果在类文件中调用,应该加上设置: $this->tpl->SetObject($this);
在一些块调用中默认将使用当前类的成员函数。 $tpl->LoadTemplate(模板的物理路径);
如果模板中带有 {dede:config name='' value=''/} 可以在载入模板后,通过 $tpl->GetConfig($name) 获得这些变量的值。
显示页面或保存页面为文件 $tpl->Display(); $tpl->SaveTo(物理绝对路径的文件名);

标记语法:

1、标记通用特性
① 短标记{dede:tagname.name/}等同于{dede:tagname name='' /}
② 块标记{dede:tagname}循环代码{/dede:tagname}

2、标记的具体语法及对应的PHP代码
① 配置变量{dede:config name='' value=''/}配置变量可以在载入模板后通过 $tpl->GetConfig($name) 获得,仅作为配置,不在模板中显示。
② 短标记
{dede:global.name/} 外部变量 等同于 <?php echo $name; ?>
{dede:var.name/} var数组 等同于 <?php echo $_vars['name']; ?>
{dede:field.name/} field数组 等同于 <?php echo $fields['name']; ?>
{dede:cfg.name/} 系统配置变量 等同于 <?php echo $cfg_name; ?>
考虑到大多数情况下都会在函数或类中调用模板,因此 $_vars、$fields 数组必须声明为 global 数组,否则模板引擎无法获得它的值从而导致产生错误。
③ 自由调用块标记
{tag:blockname bind='GetArcList' bindtype='class'}
循环代码
{/tag:blockname}
必要属性:
bind 数据源来源函数 || bindtype 函数类型,默认是 class 可选为 sub || rstype 返回结果类型,默认是 array ,可选项为 string

固定块标记参见官方手册,点击这里


模板标签

织梦模板引擎分为编译式和解析式,系统的标签同样也有这样的划分。
我们在系统涉及到内容管理及生成HTML的地方大多采用了解析式的模板标签,一些互动部分的功能,如果使用了织梦编译式的模板引擎,也会涉及到编译式的标签,在模板制作和日常的站点维护中,我们大多接触的是解析式的模板标签

解析式标签所在的目录为系统根目录下/include/taglib中,编译式涉及到的标签文件存在放根目录下/include/tpllib

标签分类:
全局标签:可以在前台文档任意页面使用的模板标记,例如:arclist、channel、sql、loop等。
列表标签:仅在模板*_list.htm中可以使用的标签,例如:list、pagelist。
内容标签:仅在模板*_.article.htm中可以使用的模板标记,例如:likearticle、pagebreak等。
模块标签:仅在特定的模块、插件中使用的模板标记
补充:不同内容模板下面的标签对应着相应的功能标签,在制作模板的时候要区分并且熟练的将页面类型与标签进行归类


下面开始介绍标签的用法与功能  点击按钮查看标签

全局标签列表标签内容标签模块标签其他标签