Dedecms V5.6 模板开发全攻略
DedeCMS 的模板系统非常灵活,它使用一套独特的标签语言,将 PHP 逻辑与 HTML 前端代码分离,使得不懂 PHP 的网页设计师也能轻松制作出功能强大的网站。

第一部分:基础入门
什么是模板?
模板就是网站的“外衣”或“蓝图”,它定义了网站各个页面(如首页、列表页、内容页)的最终显示样式,DedeCMS 通过解析模板文件,并填充从数据库中获取的数据,最终生成用户看到的 HTML 网页。
模板文件存放位置
在 DedeCMS 安装目录下,模板文件主要存放在 /templets/ 文件夹中,这个文件夹里通常会有几个子文件夹:
/templets/default/:这是系统默认的模板文件夹,我们制作新模板时,最好在这里新建一个以您的模板名命名的文件夹,/templets/mynewtemplate/。/templets/plus/:存放系统插件(如留言板、友情链接)的模板。/templets/system/:存放系统后台和一些公共组件的模板。
最佳实践:永远不要修改 /templets/default/ 里的默认文件,复制一份出来,在新文件夹里进行修改,这样既安全,也方便未来升级。
模板文件类型
一个完整的网站模板通常包含以下几种核心文件:

index.htm:首页模板list_*.htm:列表页模板。 代表栏目ID,list_1.htm是 ID 为 1 的栏目列表页。article_*.htm:页模板。 代表栏目ID,article_1.htm是 ID 为 1 的栏目下的文章内容页。head.htm:头部公共模板,通常包含网站 logo、主导航栏等。footer.htm:底部公共模板,通常包含版权信息、友情链接等。channel/:栏目封面模板,当栏目设置为“频道封面”时,会调用此目录下的模板。
模板引擎与标签
DedeCMS 使用自己的模板引擎,核心就是 {dede:标签名 属性='值'} 这样的语法。
- 单标签:用于输出一个值,如
{dede:field.title/}。 - 双标签:用于循环输出内容,如
{dede:arclist}...{/dede:arclist}。
第二部分:核心标签详解
这是模板开发的重中之重,理解并熟练使用这些标签,你就能制作出任何你想要的页面。
全局通用标签
这些标签可以在任何模板文件中使用。
-
cfg_webname:网站后台设置的网站名称。
-
网站路径
<link href="{dede:global.cfg_cmspath/}/templets/mynewtemplate/style.css" rel="stylesheet" type="text/css" />cfg_cmspath:网站的根目录路径,如http://www.yoursite.com。
-
栏目导航
{dede:channel type='top' row='8'} <a href="[field:typelink/]">[field:typename/]</a> {/dede:channel}type='top':只调用顶级栏目。row='8':调用 8 个栏目。[field:typelink/]:栏目链接。[field:typename/]:栏目名称。
-
当前位置 (面包屑导航)
{dede:field name='position'/}会自动生成类似 “首页 > 栏目 > 子栏目” 的导航链。
首页常用标签
-
调用最新文章列表
{dede:arclist titlelen='30' row='10' typeid='1'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:arclist}titlelen='30'长度限制为 30 个字符。row='10':显示 10 条文章。typeid='1':指定调用 ID 为 1 的栏目下的文章,不写则调用所有。[field:arcurl/]:文章链接。[field:title/]。[field:pubdate/]:发布日期。function="MyDate('Y-m-d',@me)"是一个自定义函数,用于格式化日期。
-
调用推荐/热门/头条文章 只需在
arclist标签中增加属性即可:flag='c':调用推荐文章。flag='h':调用热门文章。flag='a':调用头条文章。- 可以组合使用,如
flag='ch'。
-
调用友情链接
{dede:flink row='24' type='text'} [field:link/] {/dede:flink}type='text':文字链接。'image'为图片链接。
列表页常用标签
-
当前栏目名称
{dede:field.typename/} -
列表文章循环
{dede:list pagesize='20'} <li> <a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span> </li> {/dede:list}pagesize='20':每页显示 20 条文章。{dede:list}是列表页专用的循环标签。
-
分页代码
<div class="dede_pages"> <ul> {dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'} </ul> </div>listsize='4':显示 4 个页码按钮。listitem:定义分页栏显示哪些部分,info(页数信息),index(首页),end(尾页),pre(上一页),next(下一页),pageno(页码)。
内容页常用标签
-
{dede:field.title/} -
{dede:field.body/} -
发布时间、来源、作者
发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/} 来源:{dede:field.source/} 作者:{dede:field.writer/} -
上下篇文章导航
<div class="prenext"> <p>上一篇:{dede:prenext get='pre'/}</p> <p>下一篇:{dede:prenext get='next'/}</p> </div>
第三部分:高级技巧与实战
模板继承与公共头尾
为了提高开发效率和代码复用性,DedeCMS V5.7 之后引入了模板继承,但 V5.6 更多是手动引入。
-
手动引入 (在 V5.6 中最常用) 在
index.htm,list_*.htm,article_*.htm等文件的开头和结尾分别引入head.htm和footer.htm。<!-- index.htm --> {dede:include filename="head.htm"/} <!-- 这里是首页的主要内容 --> {dede:include filename="footer.htm"/}{dede:include filename="文件名"/}是引入文件的标签。
自定义函数
页调用文章时,有时需要对内容进行特殊处理,比如截取摘要、去除图片等。
- 修改
include/helpers/extend.helper.php文件 这个文件是专门用来存放自定义函数的,你想添加一个函数来截取 200 字符的摘要:// 在 extend.helper.php 中添加如下代码 if ( ! function_exists('SubContent')) { function SubContent($string, $start=0, $length=200, $charset="utf-8", $dot="...") { $content = cn_substr($string, $length, $charset); return $content; } } - 在模板中调用
{dede:field.body function='SubContent(@me, 0, 200)'/}
条件判断 if
if 标签用于根据条件显示不同的内容,非常实用。
- 语法
{dede:if condition='表达式'} <!-- 成立时显示的内容 --> {else} <!-- 不成立时显示的内容 --> {/dede:if} - 示例:判断是否有缩略图
{dede:if condition="@me['litpic'] != '/images/defaultpic.gif' && @me['litpic'] != ''"} <img src="{dede:field name='litpic'/}" alt="{dede:field.title/}" /> {else} <img src="/images/no_thumb.jpg" alt="暂无缩略图" /> {/dede:if}@me在这里代表当前正在循环的单条记录(如arclist中的某篇文章)。
修改文章内容页的发布信息
页发布信息是固定的,但你可以通过修改模板来让它更灵活,打开 article_*.htm,找到类似这样的代码:
<div class="info">
<span>发布时间:{dede:field.pubdate function="MyDate('Y-m-d',@me)"/}</span>
<span>来源:{dede:field.source/}</span>
<span>作者:{dede:field.writer/}</span>
<span>点击:<script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field.aid/}&mid={dede:field.mid/}" type='text/javascript' language="javascript"></script>次</span>
</div>
你可以直接在这里修改 HTML 结构和标签,或者使用 if 标签来判断某些字段是否为空再显示。
第四部分:制作一个简单模板的完整流程
- 准备素材:准备好 logo、背景图片、CSS 样式表、JavaScript 文件等。
- 创建模板文件夹:在
/templets/下创建一个新文件夹,mydemo。 - 复制并修改核心文件:
- 将
/templets/default/下的index.htm,head.htm,footer.htm复制到你的/templets/mydemo/文件夹中。 - 打开
head.htm,修改 logo 的链接和图片路径,修改 CSS 和 JS 的引用路径(将/templets/default/改为/templets/mydemo/)。 - 打开
footer.htm,修改版权信息等。
- 将
- 设计首页布局:打开
index.htm,使用 HTML + CSS 搭建首页的整体框架(header, main, footer)。 - 填充标签:在框架的相应位置填入 DedeCMS 标签。
- 在
<title>中填入{dede:global.cfg_webname/}。 - 在主导航栏填入
{dede:channel type='top' row='8'}...{/dede:channel}。 - 区填入
{dede:arclist row='10'}...{/dede:arclist}。 - 在页脚填入
{dede:include filename='footer.htm'/}。
- 在
- 后台设置:
- 登录 DedeCMS 后台。
- 进入 【系统】-> 【系统基本参数】-> 【核心设置】,将“模板默认目录”设置为你的模板文件夹名
mydemo。 - 进入 【系统】-> 【系统基本参数】-> 【站点设置】,确保网站名称等信息正确。
- 生成网站:
- 进入 【生成】-> 【一键生成网站】**,点击“开始生成”。
- 系统会根据你的模板和数据库内容,静态化生成所有页面。
第五部分:常见问题与资源
-
Q: 为什么我的首页不显示内容?
A: 1. 检查标签是否写错,2. 检查后台对应栏目是否设置了“生成HTML”,3. 检查数据库中是否有文章,4. 确保已经执行了“生成网站”操作。
-
Q: 如何修改列表页的分页样式?
- A: 分页的样式由 CSS 控制,找到你的模板文件夹下的 CSS 文件,根据分页代码的 HTML 结构(通常是
.dede_pages里的ul和li)编写相应的 CSS 样式即可。
- A: 分页的样式由 CSS 控制,找到你的模板文件夹下的 CSS 文件,根据分页代码的 HTML 结构(通常是
-
Q: 模板标签和变量有什么区别?
- A: 是具有特定功能的指令,如
{dede:arclist},它会执行一段代码并返回结果。变量通常是标签内部用来获取具体值的属性,如arclist标签里的row属性,或者field标签里的title。
- A: 是具有特定功能的指令,如
学习资源推荐:
- 官方论坛:DedeCMS 官方论坛 是解决问题的最佳去处,有大量高手和教程。
- 模板下载:织梦模板堂 等网站提供大量免费和付费的模板,可以下载下来研究学习。
- 标签手册:在后台的 【开发】-> 【模板标签手册】** 中有最权威的标签说明。
希望这份详尽的教程能帮助您顺利掌握 DedeCMS V5.6 的模板开发,祝您学习愉快!
