- 什么是 Dede 标签? (基本概念)
- 标签的基本语法结构 (如何看懂一个标签)
- 常用核心标签详解 (附实例和参数说明)
- 标签的高级应用技巧
- 标签的调试与排错
- 总结与最佳实践
什么是 Dede 标签?
Dede 标签是 DedeCMS 系统中一种类似模板引擎的标记语言,它不是 PHP、HTML 或 JavaScript,而是 DedeCMS 自定义的一套规则,用来告诉系统“在页面的这个位置,应该显示什么内容”。

当用户访问一个页面时,DedeCMS 的解析引擎会扫描模板文件(通常是 .htm 文件),找到所有 {dede:...} 标签,然后根据标签的指令,从数据库中查询出相应的数据,最后将数据填充到标签位置,生成最终的 HTML 页面返回给用户。
核心作用:
- 内容与表现分离:将网站的结构(HTML)和内容(数据库)分开,方便维护。
- 动态调用内容:可以灵活地调用文章、栏目、图集、软件等任意内容。
- 提高开发效率:无需手动编写复杂的 PHP 代码,只需使用简单的标签即可实现功能。
标签的基本语法结构
一个标准的 Dede 标签通常由四部分组成:
{dede:标签名 属性1='值1' 属性2='值2' ...}
循环体内的HTML代码
[field:属性名 /]
{/dede:标签名}
{dede:标签名}: 标签的开始,{dede:arclist}(文章列表)。属性='值': 控制标签行为的参数,typeid='1'(指定栏目ID),row='10'(显示条数)。循环体内的HTML代码: 用于定义输出内容的样式,<li>、<div>等。[field:属性名 /]: 在循环体内,用于显示单条数据的特定字段,[field:title/](文章标题),[field:pubdate function="MyDate('Y-m-d',@me)"/](发布日期)。{/dede:标签名}: 标签的结束,必须有始有终。
常用核心标签详解
这里列举一些最常用、最重要的标签,并附上实例和参数说明。

a. 文章列表标签 ({dede:arclist})
这是最最常用的标签,用于在首页、列表页等地方调用文章列表。
基本用法:
{dede:arclist typeid='1' row='10' titlelen='30' orderby='pubdate'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
</li>
{/dede:arclist}
常用参数说明:
| 参数名 | 说明 | 示例 |
|---|---|---|
typeid |
指定栏目ID,调用指定栏目下的文章,多个ID用逗号隔开。 | typeid='1' 或 typeid='1,2,3' |
row |
调用条数,显示多少篇文章。 | row='10' |
orderby |
排序方式。pubdate(发布时间), click(点击量), id(文章ID), sortrank(置顶级别)等。 |
orderby='click' (按点击量排序) |
orderway |
排序方向。desc(降序), asc(升序),常与 orderby 配合使用。 |
orderway='desc' |
idlist |
指定文章ID列表,调用指定的几篇文章,用逗号隔开。 | idlist='1,5,10' |
channelid |
模型ID。1 代表文章,2 代表图集,可根据需要调用不同模型。 |
channelid='1' |
limit |
起始位置,调用条数,比 row 更灵活,可以指定从第几条开始。 |
limit='0,10' (从第0条开始,共10条) |
noflag |
排除特定标志。noflag='h' 表示不调用头条文章。 |
noflag='h,c' |
b. 文章内容标签 ({dede:field})
这个标签通常用在文章内容页(article_article.htm)模板中,用于显示当前文章的详细信息。

基本用法:
<h1>{dede:field.title/}</h1>
<div class="info">
作者:{dede:field.writer/} 发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/} 来源:{dede:field.source/} 点击:{dede:field.click/}
</div>
<div class="content">
{dede:field.body/}
</div>
常用字段:
{dede:field.title/}: 文章标题{dede:field.body/}: 文章正文内容{dede:field.pubdate/}: 发布时间(时间戳格式){dede:field.click/}: 点击次数{dede:field.description/}: 文章摘要{dede:field.keywords/}: 文章关键词
字段函数修饰:
{dede:field.pubdate/} 输出的是时间戳(如 1700000000),非常不直观,DedeCMS 支持使用函数来格式化输出。
{dede:field.pubdate function="MyDate('Y-m-d',@me)"/}
function="...": 表示调用一个函数。MyDate: DedeCMS 内置的日期格式化函数。'Y-m-d': 日期格式,Y代表四位年份,m代表月份,d代表日期。@me: 代表当前字段的原始值(这里是时间戳)。
c. 栏目标签 ({dede:channel})
用于调用栏目列表,通常用在网站导航栏。
基本用法:
{dede:channel type='top' row='8'}
<li><a href="[field:typeurl/]">[field:typename/]</a></li>
{/dede:channel}
常用参数:
type:top(调用顶级栏目),son(调用当前栏目的子栏目),self(调用当前栏目及所有下级栏目)。row: 调用栏目数量。typeid: 指定从哪个栏目开始调用。
d. 文章页分页标签 ({dede:pagebreak})
很长,启用了分页后,在文章内容页模板中需要使用此标签来生成分页链接。
基本用法:
将此标签放在 {dede:field.body/} 的后面。
<div class="content">
{dede:field.body/}
</div>
<!-- 分页链接 -->
<div class="page">
{dede:pagebreak/}
</div>
标签的高级应用技巧
a. 自定义函数
当系统自带的函数不够用时,可以自定义函数。
步骤:
- 在
/include/extend.func.php文件中添加你的PHP函数。// 示例:截取文本,并加上省略号 function MyTruncate($str, $len) { if (mb_strlen($str, 'UTF-8') > $len) { return mb_substr($str, 0, $len, 'UTF-8') . '...'; } return $str; } - 在模板中调用:
{dede:field.description function="MyTruncate(@me, 100)"/}
b. 条件判断 (if
if 标签允许你在模板中根据条件显示不同的内容。
基本语法:
{dede:field.flag runphp='yes'}
if(@me == 'h') {
@me = "<span class='red'>[头条]</span>";
} else {
@me = "";
}
{/dede:field.flag}
或者更简洁的写法:
{dede:if fieldtypeid=='1'}
<p>这是文章栏目</p>
{else if fieldtypeid=='2'}
<p>这是图集栏目</p>
{else}
<p>这是其他栏目</p>
{/dede:if}
c. 循环嵌套
可以嵌套使用不同的标签,实现更复杂的功能,先调用顶级栏目,再循环调用每个栏目下的文章。
{dede:channel type='top'}
<div class="cat-box">
<h2>[field:typename/]</h2>
<ul>
{dede:arclist typeid='[field:id]' row='5'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
</div>
{/dede:channel}
标签的调试与排错
如果标签没有显示内容或显示不正常,可以按以下步骤排查:
- 检查标签拼写:确保
{dede: 和 都正确,属性名和值没有拼写错误。
- 检查参数:
typeid 是否正确?可以去后台“栏目管理”里查看对应栏目的ID。
row 是否设置得太小?
orderby 和 orderway 是否符合预期?
- 检查循环体:确保
[field:xxx/] 的字段名是正确的,并且被正确的 HTML 标签包裹。
- 开启系统调试:
- 进入后台 -> 系统 -> 系统基本参数 -> 核心设置。
- 将“是否开启模板调试”设置为“是”。
- 刷新前台页面,页面底部会显示 SQL 查询语句,通过分析 SQL 语句,你可以看到系统到底执行了什么查询,以及查询结果是否为空,这是最有效的排错方法。
- 清空缓存:修改模板或后台设置后,务必去后台“生成” -> “更新缓存”中清空缓存,否则看不到效果。
总结与最佳实践
- 善用官方文档:DedeCMS 官方文档是最权威的参考资料,里面有所有标签的详细说明。
- 从简单开始:先使用最基础的标签,如
{dede:arclist} 和 {dede:field},熟悉后再尝试高级功能。
- 保持代码整洁:为标签和属性添加注释,方便日后维护。
- 利用调试功能:不要害怕出错,DedeCMS 的模板调试功能是你最好的朋友。
- 安全第一:在使用
runphp='yes' 时,要确保代码的安全性,避免执行恶意代码。
掌握了 Dede 标签,你就掌握了 DedeCMS 的灵魂,多练习、多尝试,你很快就能熟练运用它来构建任何你想要的网站页面。
if 标签允许你在模板中根据条件显示不同的内容。
基本语法:
{dede:field.flag runphp='yes'}
if(@me == 'h') {
@me = "<span class='red'>[头条]</span>";
} else {
@me = "";
}
{/dede:field.flag}
或者更简洁的写法:
{dede:if fieldtypeid=='1'}
<p>这是文章栏目</p>
{else if fieldtypeid=='2'}
<p>这是图集栏目</p>
{else}
<p>这是其他栏目</p>
{/dede:if}
c. 循环嵌套
可以嵌套使用不同的标签,实现更复杂的功能,先调用顶级栏目,再循环调用每个栏目下的文章。
{dede:channel type='top'}
<div class="cat-box">
<h2>[field:typename/]</h2>
<ul>
{dede:arclist typeid='[field:id]' row='5'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
</div>
{/dede:channel}
标签的调试与排错
如果标签没有显示内容或显示不正常,可以按以下步骤排查:
- 检查标签拼写:确保
{dede:和 都正确,属性名和值没有拼写错误。 - 检查参数:
typeid是否正确?可以去后台“栏目管理”里查看对应栏目的ID。row是否设置得太小?orderby和orderway是否符合预期?
- 检查循环体:确保
[field:xxx/]的字段名是正确的,并且被正确的 HTML 标签包裹。 - 开启系统调试:
- 进入后台 -> 系统 -> 系统基本参数 -> 核心设置。
- 将“是否开启模板调试”设置为“是”。
- 刷新前台页面,页面底部会显示 SQL 查询语句,通过分析 SQL 语句,你可以看到系统到底执行了什么查询,以及查询结果是否为空,这是最有效的排错方法。
- 清空缓存:修改模板或后台设置后,务必去后台“生成” -> “更新缓存”中清空缓存,否则看不到效果。
总结与最佳实践
- 善用官方文档:DedeCMS 官方文档是最权威的参考资料,里面有所有标签的详细说明。
- 从简单开始:先使用最基础的标签,如
{dede:arclist}和{dede:field},熟悉后再尝试高级功能。 - 保持代码整洁:为标签和属性添加注释,方便日后维护。
- 利用调试功能:不要害怕出错,DedeCMS 的模板调试功能是你最好的朋友。
- 安全第一:在使用
runphp='yes'时,要确保代码的安全性,避免执行恶意代码。
掌握了 Dede 标签,你就掌握了 DedeCMS 的灵魂,多练习、多尝试,你很快就能熟练运用它来构建任何你想要的网站页面。
