我将从基础概念、常用标签、高级技巧和常见问题与解决方案四个方面进行详细说明。

基础概念:标签是什么?
在织梦CMS中, 是一种类似HTML的标记语言,用于在模板文件(.htm)中动态地获取和显示数据库中的内容。
核心流程:
- 模板文件:设计师制作好的静态HTML页面,如
index.htm,list_article.htm。 - 标签替换:当用户访问网站时,织梦系统会读取模板文件。
- 执行标签:系统解析模板中的所有标签,执行对应的PHP代码,从数据库中查询所需数据。
- 生成HTML:将查询到的数据替换掉标签,生成最终的、纯静态的HTML页面,并发送给用户的浏览器。
标签的基本结构:
{dede:标签名 属性='值' /} 或 {dede:标签名 属性='值'} ... {/dede:标签名}
- 单标签:如
{dede:field.title /},用于获取单个值。 - 对标签:如
{dede:arclist}...{/dede:arclist},用于循环输出一个列表。
常用标签详解与实例
这是最常用的部分,掌握了这些,80%的网站需求都能解决。

文章列表标签 - {dede:arclist}
用于在首页、频道页等地方调用文章列表。
常用属性:
| 属性名 | 说明 | 示例 |
|---|---|---|
typeid |
核心:指定栏目ID,调用指定栏目的文章。 | typeid='1' (调用栏目ID为1下的文章) |
row |
调用文章的数量。 | row='10' (调用10篇文章) |
infolen |
摘要长度。 | infolen='120' |
orderby |
排序方式。click(按点击量), pubdate(按发布时间), id(按ID) |
orderby='click' |
channel |
指定频道ID,用于调用其他频道的文章。 | channel='1' |
flag |
特殊属性。h(头条), c(推荐), p(图片) |
flag='c' (只调用推荐文章) |
基本用法示例 (首页调用文章列表):
<h2>最新文章</h2>
<ul>
{dede:arclist typeid='1' row='5' titlelen='24' orderby='pubdate'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:arclist}
</ul>
字段说明 (在{dede:arclist}内使用):
[field:title/][field:arcurl/]:文章链接[field:pubdate/]:发布时间,常用function格式化,如function="MyDate('Y-m-d', @me)"[field:click/]:点击量[field:litpic/]:文章缩略图[field:description/]:文章摘要
标签 - {dede:field}
用于在文章详情页(article_article.htm)和栏目页(list_category.htm)中获取单个字段的值。
常用属性:
| 属性名 | 说明 | 示例 |
|---|---|---|
name |
核心:指定要获取的字段名。 | name='title' |
function |
对字段值进行函数处理。 | function='strlen' (获取字符串长度) |
基本用法示例 (在article_article.htm中):
<h1>{dede:field.title/}</h1>
<div class="info">
发布时间:{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:channel}
用于调用栏目列表,常用于主导航、侧边栏等。
常用属性:
| 属性名 | 说明 | 示例 |
|---|---|---|
typeid |
核心:指定从哪个栏目开始调用。typeid='0'或typeid=''表示调用顶级栏目。 |
typeid='0' |
row |
调用栏目的数量。 | row='8' |
type |
栏目类型。top(顶级栏目), son(子栏目), self(同级栏目) |
type='top' |
基本用法示例 (主导航):
<ul id="nav">
{dede:channel type='top' row='8'}
<li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
</ul>
字段说明:
[field:typename/]:栏目名称[field:typelink/]:栏目链接
标签 - {dede:myad} / {dede:sql}
-
{dede:myad}: 调用广告位,需要在后台“广告管理”中创建广告。{dede:myad name='topbanner'/}name属性对应后台广告标识符。 -
{dede:sql}: 非常强大,可以直接执行SQL语句查询数据库,实现更灵活的调用。 ⚠️警告:使用不当有SQL注入风险,请确保变量来源安全!示例:调用全站点击量最高的10篇文章
{dede:sql sql="SELECT id,title,click FROM dede_archives ORDER BY click DESC LIMIT 0,10"} <li><a href='/plus/view.php?aid=[field:id/]'>[field:title/]</a> ([field:click/])</li> {/dede:sql}
高级技巧与常见问题
自定义函数 (function)
function属性是织梦的精髓,可以对字段值进行二次处理。
常用内置函数:
MyDate('格式', @me): 格式化日期。@me代表字段本身的值。[field:pubdate function="MyDate('Y-m-d', @me)"/]cn_substr(@me, 长度): 截取中文字符串,防止乱码。[field:title function="cn_substr(@me, 20)"/]
htmlspecialchars(@me): 转义HTML特殊字符,防止XSS攻击。[field:description function="htmlspecialchars(cn_substr(@me, 100))"/]
自定义函数:
- 在
/include/extend.func.php文件中添加你的PHP函数。// 示例:将文本中的关键词替换为高亮 function highlight($kw, $text){ return str_replace($kw, "<span style='color:red'>".$kw."</span>", $text); } - 在模板中调用。
{dede:field.title function="highlight('织梦', @me)"/}
条件判断 (if / else)
用于根据条件输出不同的内容。
语法:
{dede:field.name runphp='yes'}
if(@me == '值A') @me = "输出A";
else if(@me == '值B') @me = "输出B";
else @me = "其他输出";
{/dede:field.name}
常用场景:
- 判断栏目ID,给不同栏目不同的样式。
{dede:field.typeid runphp='yes'} if(@me == 1) @me = "class='current'"; else @me = ""; {/dede:field.typeid} <li [field:typeid runphp='yes']if(@me == 1) @me = "class='current'"; else @me = "";[/field:typeid]> <a href="[field:typelink/]">[field:typename/]</a> </li> - 判断是否有缩略图。
{dede:field.litpic runphp='yes'} if(@me != '') @me = "<img src='".@me."' />"; else @me = "<img src='/images/default.jpg' />"; {/dede:field.litpic}
循环内嵌套 (sonclass)
在一个栏目列表中,同时显示该栏目下的子栏目。
示例:
{dede:channel type='top' row='8'}
<dl>
<dt><a href="[field:typelink/]">[field:typename/]</a></dt>
<dd>
{dede:son typeid='[field:id]' row='5'}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:son}
</dd>
</dl>
{/dede:channel}
常见问题与解决方案
问题1:标签不生效,直接显示 {dede:arclist /} 这样的代码。
- 原因:织梦标签没有被解析。
- 解决方案:
- 检查模板文件是否为
.htm后缀。 - 检查后台“系统” -> “系统基本参数” -> “核心设置”中的“是否使用动态页面”是否设置正确。
- 确保网站根目录下有
index.php和templets目录。 - 检查标签语法是否错误,比如拼写错误、引号不匹配等。
- 检查模板文件是否为
问题2:调用出来的内容乱码(问号或方块)。
- 原因:字符编码不统一,通常是数据库、后台、文件编码不一致导致的。
- 解决方案:
- 统一编码:将网站所有文件(HTML、PHP)都保存为
UTF-8无BOM格式。 - 检查后台:登录后台,检查“系统” -> “系统基本参数” -> “核心设置”中的“网站编码”是否为
UTF-8。 - 检查数据库:确保数据库的编码也是
utf8_general_ci。
- 统一编码:将网站所有文件(HTML、PHP)都保存为
问题3:{dede:arclist} 调用不到指定栏目的文章。
- 原因:
typeid写错了。- 该栏目下没有文章或文章被禁用了。
- 栏目设置了“不生成栏目页”,并且没有子栏目。
- 解决方案:
- 去后台“栏目管理”确认正确的栏目ID。
- 检查栏目下的文章状态。
- 尝试不指定
typeid,看看能否调用出文章,来排查是标签问题还是数据问题。
问题4:如何调用当前栏目的子栏目?
- 方法:使用
typeid属性配合son类型。{dede:channel type='son' typeid=''} <a href="[field:typelink/]">[field:typename/]</a> {/dede:channel}在栏目页模板(
list_category.htm)中,typeid=''会自动获取当前栏目的ID。
织梦CMS的标签调用是一个熟能生巧的过程,建议你:
- 从模仿开始:下载官方默认模板,看看各种标签是怎么用的。
- 理解字段:记住常用标签(如
arclist,field)里有哪些常用字段(如title,arcurl,pubdate)。 - 善用
function和if:这两个是让模板“活”起来的关键。 - 遇到问题先查官网和社区:很多问题前人都遇到过,有成熟的解决方案。
希望这份详细的指南能帮助你解决织梦CMS的标签调用问题!
