什么是 DedeCMS 标签?
DedeCMS 标签是一种模板引擎指令,它告诉 DedeCMS 在页面生成时,从数据库中提取特定的数据,并将其渲染到 HTML 模板文件的指定位置。

核心思想:
- 内容与表现分离存储在数据库中,样式和布局写在 HTML 模板文件里,标签作为桥梁,将两者连接起来。
- 动态生成静态:当访问一个页面时,DedeCMS 解析模板中的标签,从数据库获取数据,生成最终的 HTML 页面,并将其保存为静态文件(.html),这大大提高了网站的访问速度。
标签的基本结构
一个典型的 DedeCMS 标签通常由以下几部分组成:
{dede:标签名 属性1='值1' 属性2='值2' ...}
循环体内要显示的内容,[field:字段名/]
{/dede:标签名}
{dede:标签名 ...}: 标签的开始。属性: 用于筛选和定义调用数据的方式,typeid(栏目ID)、row(调用条数)等。[field:字段名/]: 字段标签,用于在循环体内显示具体的数据,如文章标题、发布时间等,它必须在循环标签(如arclist,list)内部使用。{/dede:标签名}: 标签的结束。
最常用标签详解
文章列表标签:arclist
这是使用频率最高的标签,用于在首页、栏目页等地方调用文章列表。
基本语法:

{dede:arclist typeid='' row='' titlelen='' orderby=''}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
常用属性:
typeid: 指定栏目ID,调用该栏目及其子栏目的文章,留空或为0表示调用所有栏目。row: 调用文章数量。row='10'表示调用10篇文章,len**标题长度**,例如titlelen='30'` 表示标题最多显示30个字符。orderby: 排序方式。sortrank: 按文章排序(默认)。pubdate: 按发布时间排序。click: 按点击量排序。id: 按文章ID排序。
channelid: 指定模型ID,默认为文章(1)。imgwidth/imgheight: 缩略图的宽度和高度。
字段标签(在 arclist 内部使用):
[field:title/]: 文章标题。[field:arcurl/]: 文章链接(URL)。[field:pubdate function="MyDate('Y-m-d', @me)"/]: 发布时间。function用于对数据进行处理,这里调用系统函数MyDate来格式化时间。[field:litpic/]: 缩略图地址。[field:description/]:[field:click/]: 点击量。
标签:list
list 标签用于栏目列表页,它通常会自动获取当前栏目的ID,并调用该栏目下的所有文章。
基本用法:
在栏目模板(list_article.htm)中,通常只需要一个简单的循环结构。
{dede:list pagesize='20'}
<div class="post">
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<div class="info">
发布时间:[field:pubdate function="MyDate('Y-m-d', @me)"/] | 作者:[field:writer/]
</div>
<p>[field:description function='cn_substr(@me, 200)'/]...</p>
</div>
{/dede:list}
分页标签:
list 标签必须配合分页标签使用。
<!-- 文章列表 -->
{dede:list pagesize='20'} ... {/dede:list}
<!-- 分页链接 -->
<div class="page">
{dede:pagelist listsize='5' listitem='info,index,next,end,pre'/}
</div>
list 标签特有属性:
pagesize: 每页显示的文章数量。
分页标签 (pagelist) 常用属性:
listsize: 显示的页码数量,listsize='5'表示当前页码前后各显示5个页码。listitem: 定义显示哪些分页元素。index: 首页pre: 上一页next: 下一页end: 末页pageno: 页码info: 页面信息(如:共X页)
文章详情页标签:field
field 标签用于页(article_article.htm),用来显示单篇文章的具体信息,如标题、内容、作者等。
基本用法: 这些标签通常直接放在模板中,不需要循环。
<h1>{dede:field.title/}</h1>
<div class="info">
作者:{dede:field.writer/} | 时间:{dede:field.pubdate function="MyDate('Y-m-d', @me)"/} | 来源:{dede:field.source/}
</div>
<div class="content">
{dede:field.body/}
</div>
常用字段:
{dede:field.title/}: 文章标题。{dede:field.body/}: 文章正文内容。{dede:field.pubdate function="MyDate('Y-m-d H:i:s', @me)"/}: 发布时间。{dede:field.description/}:{dede:field.keywords/}: 文章关键词。{dede:field.click/}: 点击量。{dede:field.arcurl/}: 文章链接(在详情页中通常用不到,但在某些特殊场景下可能需要)。
栏目标签:channel
channel 标签用于调用网站的一级栏目。
基本用法: 常用于网站顶部导航栏。
<ul id="nav">
<li><a href="{dede:global.cfg_basehost/}/">首页</a></li>
{dede:channel type='top'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
常用属性:
type: 栏目类型。top: 调用顶级栏目(默认)。son: 调用当前栏目的子栏目。self: 调用当前栏目。
自由列表标签:flist
这是一个非常强大的标签,可以跨栏目、按自定义条件调用内容,它需要先在后台“[核心]-[自由列表]”中创建一个列表规则。
基本用法: 假设你创建了一个名为“热门文章”的自由列表。
{dede:flist title='热门文章' row='8'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:flist}
高级技巧
条件判断:if / else
if 标签用于根据条件显示不同的内容。
{dede:field name='typeid' runphp='yes'}
if(@me == 5) {
@me = "<div>这是栏目ID为5的专属内容</div>";
} else {
@me = "<div>这是其他栏目的通用内容</div>";
}
{/dede:field}
或者更简洁的用法:
{dede:if fieldtypeid == '5'}
<div>这是栏目ID为5的专属内容</div>
{else}
<div>这是其他栏目的通用内容</div>
{/dede:if}
循环输出:loop
loop 标签用于遍历一个数组,比 arclist 更底层,更灵活。
基本用法:
{dede:loop table='dede_archives' sort='pubdate' row='10' if ''}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:loop}
table: 要查询的数据表。sort: 排序字段。row: 循环次数。if: 查询条件。
PHP 代码执行:runphp
几乎所有标签的属性都支持 runphp='yes',让你可以在标签内执行 PHP 代码,实现更复杂的功能。
示例:修改标题
{dede:field.title runphp='yes'}
// 如果标题长度超过20,则截断
if(strlen(@me) > 20) {
@me = cn_substr(@me, 20) . '...';
}
{/dede:field.title}
实践示例:制作一个简单的首页模板
文件路径:/templets/default/index.htm
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{dede:global.cfg_webname/}</title>
</head>
<body>
<header>
<h1><a href="{dede:global.cfg_basehost/}/">{dede:global.cfg_webname/}</a></h1>
<nav>
<ul>
<li><a href="{dede:global.cfg_basehost/}/">首页</a></li>
{dede:channel type='top'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
</nav>
</header>
<main>
<section class="featured">
<h2>推荐文章</h2>
<ul>
{dede:arclist typeid='' row='5' titlelen='40' orderby='click'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
</section>
<section class="latest">
<h2>最新文章</h2>
<ul>
{dede:arclist typeid='' row='10' titlelen='30' orderby='pubdate'}
<li><a href="[field:arcurl/]">[field:title/]</a> <span>[field:pubdate function="MyDate('m-d', @me)"/]</span></li>
{/dede:arclist}
</ul>
</section>
</main>
<footer>
<p>© {dede:global.cfg_powerby/}</p>
</footer>
</body>
</html>
调试与排错
当标签不生效时,可以按以下步骤排查:
- 检查标签拼写:确保标签名、属性名拼写正确,区分大小写。
- 检查标签位置:确保字段标签(如
[field:title/])在循环标签(如arclist)内部。 - 检查属性值:
typeid、row等属性的值是否正确,特别是typeid,确保调用的是存在的栏目ID。 - 检查模板文件:确认模板文件名是否正确,并且该模板已经被分配给了相应的页面(如首页、栏目页)。
- 更新HTML:修改模板后,需要去后台“[生成]-[更新主页]”或“[更新栏目/文档]”重新生成页面,新内容才会生效。
- 查看源代码:在浏览器中查看页面源代码,看标签是否被正确解析,或者是否被原样输出了,如果原样输出,通常是标签语法错误。
希望这份详细的指南能帮助你完全掌握 DedeCMS 的标签模板系统!
