在模板文件中,使用 {dede:标签名 属性='值'}...{/dede:标签名} 或 {dede:变量名/} 的形式来调用和显示从 PHP 后端传递过来的数据。

下面我将从简单到复杂,分层次详细介绍 DedeCMS 的变量输出。
基础变量输出
这是最常见、最简单的用法,通常用于显示文章、栏目等基本信息。
单行文本/字符串变量
这类变量通常直接使用 {dede:变量名/} 输出。
示例: 在文章详情页 (article_article.htm) 中,输出文章的标题。

<h1>{dede:field.title/}</h1>
常用单行变量:
{dede:field.title/}: 文章标题{dede:field.shorttitle/}: 文章短标题{dede:field.writer/}: 作者{dede:field.source/}: 来源{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}: 发布时间(带格式化){dede:field.seotitle/}: SEO标题{dede:field.description/}: 文章摘要
注意: field 是一个特殊的标签,代表当前文章的字段。@me 是模板引擎中的一个内置变量,代表当前标签的值。
带格式化的变量
很多变量需要经过格式化处理才能正确显示,比如时间戳、长文本等,这通常通过 function 属性实现。
示例1:格式化时间戳

field.pubdate 存储的是一个 Unix 时间戳,直接显示看不懂,我们需要用 MyDate 函数将其格式化。
发布时间:{dede:field.pubdate function='MyDate("Y-m-d", @me)'/}
<!-- 输出格式如:2025-10-27 -->
<!-- 更详细的格式 -->
{dede:field.pubdate function='MyDate("Y年m月d日 H:i:s", @me)'/}
<!-- 输出格式如:2025年10月27日 15:30:00 -->
示例2:截取摘要
field.description 可能为空,或者太长,我们可以用 cn_substr 函数来截取并指定长度。
<!-- 截取 description 的前100个字符 -->
示例3:自定义函数
你也可以调用自定义的 PHP 函数。
{dede:field.title function='MyCustomFunction(@me)'/}
循环列表变量输出
当需要输出一个列表(如文章列表、栏目列表、图集列表等)时,需要使用循环标签。
{dede:arclist} 文章列表标签
这是 DedeCMS 中最核心、最常用的标签之一,用于在任意页面调用文章列表。
基本用法:
{dede:arclist row='10' titlelen='30' typeid='1'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('m-d',@me)"/]</span>
</li>
{/dede:arclist}
常用属性:
row='10': 调用 10 条记录。typeid='1': 只调用 ID 为 1 的栏目及其子栏目的文章,不写则调用所有,len='30'`: 标题长度,截取 30 个字符。orderby='hot': 排序方式,hot为按点击量,pubdate为按发布时间,sortrank为按权重。
内部字段(循环体内使用):
在 {dede:arclist} 和 {/dede:arclist} 之间,使用 [field:xxx/] 来输出单条记录的字段。
[field:title/]: 文章标题[field:arcurl/]: 文章链接(非常重要!)[field:pubdate function="MyDate('Y-m-d',@me)"/]: 发布时间[field:description function='cn_substr(@me, 100)'/]: 文章摘要[field:litpic/]: 文章缩略图
{dede:list} 当前栏目文章列表标签
这个标签通常用于在栏目列表页(如 list_*.htm)中,分页显示本栏目的所有文章。
基本用法 (在 list_article.htm 中):
<ul>
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="MyDate('Y-m-d",@me)"/]</span>
</li>
{/dede:list}
</ul>
<!-- 分页链接 -->
<div class="dede_pages">
<ul>
{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'/}
</ul>
</div>
与 arclist 的区别:
list必须在栏目列表页中使用,它直接操作当前栏目的文章数据。arclist可以在任何页面使用,通过typeid指定数据来源,非常灵活。
高级与特殊变量输出
系统变量
输出 DedeCMS 系统的全局变量,如网站名称、路径等。
示例:
<!-- 网站首页链接 -->
<a href="{dede:global.cfg_basehost/}">{dede:global.cfg_webname/}</a>
<!-- 网站路径,用于引入CSS/JS -->
<link rel="stylesheet" href="{dede:global.cfg_cmsurl/}/static/css/style.css">
<!-- 会员中心链接 -->
<a href="{dede:global.cfg_memberurl/}/index.php">会员中心</a>
常用全局变量:
{dede:global.cfg_basehost/}: 网站域名,如http://www.example.com{dede:global.cfg_cmsurl/}: CMS 系统路径,如http://www.example.com/dede{dede:global.cfg_webname/}: 网站名称{dede:global.cfg_powerby/}: 网页底部版权信息
IF 条件判断
在模板中根据条件输出不同的内容。
语法:
{dede:if 条件表达式}
// 条件成立时输出
<span>这是新发布的文章</span>
{else}
// 条件不成立时输出
<span>这是旧文章</span>
{/dede:if}
示例:判断文章是否为当天发布
{dede:if
strptime(MyDate('Y-m-d', field.pubdate), MyDate('Y-m-d', @me)) == 0
}
<span class="new-tag">NEW</span>
{/dede:if}
或者更简单的方式(利用PHP的 判断):
{dede:if MyDate('Y-m-d', field.pubdate) == MyDate('Y-m-d', @me)}
<span class="new-tag">NEW</span>
{/dede:if}
注意:@me 在这里代表当前时间。
字段值替换(适用于特定字段)
有些字段(如 flag)存储的是逗号分隔的标识符,可以用 function='str_replace' 来进行替换显示。
**示例:将文章的 flag 字段中的 c 替换为 “推荐”,h 替换为 “头条”。
{dede:field.flag function='str_replace("c", "推荐", str_replace("h", "头条", @me))'/}
flag 的值是 h,c,那么输出就会是 “头条,推荐”。
自定义字段输出
这是 DedeCMS 强大扩展性的体现,当你添加了自定义字段后,如何输出它们?
普通文本/数字类型
直接调用即可,和普通字段一样。
假设你添加了一个自定义字段 myprice(价格)。
价格:{dede:field.myprice/} 元
单选/多选类型
这类字段在数据库中存储的是选项的值(如 a,b,c),需要用 function 进行处理。
假设你添加了一个自定义字段 mycolor(颜色),选项为“红色|a, 绿色|b, 蓝色|c”。
使用 str_replace 进行简单替换(不推荐,如果选项多会很麻烦)
{dede:field.mycolor function='str_replace("a", "红色", str_replace("b", "绿色", @me))'/}
使用 GetInnerText 和选项列表(推荐)
这是 DedeCMS 内置的、更优雅的方式,你需要先在后台自定义字段的“列表选项”中填写好映射关系。
{dede:field.mycolor function='GetInnerText(@me)'/}
mycolor 的值是 a,b,那么输出就会是 “红色, 绿色”。
文件/图片类型
如果自定义字段是上传文件或图片,它存储的是相对路径。
示例:输出一个自定义的图片字段 myphoto
<img src="{dede:field.myphoto/}" alt="自定义图片" />
为了更安全,通常会加上系统路径:
<img src="[field:global.cfg_cmsurl/][field:myphoto/]" alt="自定义图片" />
总结与最佳实践
-
区分场景:
- 在首页、封面页等任意页面调用其他栏目文章,用
{dede:arclist}。 - 在栏目列表页显示本栏目文章,用
{dede:list}。 - 在文章详情页显示当前文章信息,用
{dede:field.xxx/}。
- 在首页、封面页等任意页面调用其他栏目文章,用
-
链接安全:凡是涉及到链接(文章链接、图片链接、CSS/JS链接),都尽量使用
[field:arcurl/]和{dede:global.cfg_cmsurl/}等动态获取的方式,而不是写死绝对路径,这样在网站迁移时才不会出错。 -
善用
function:时间格式化、字符串截取、字段替换等操作,优先使用function属性,它是在 PHP 端处理的,效率比用 JS 在前端处理高。 -
查阅官方文档:DedeCMS 的标签非常丰富,以上只是最常用的部分,遇到更复杂的需求,可以查阅 DedeCMS 官方提供的模板标签手册,那里有最权威的说明。
希望这份详细的指南能帮助你完全掌握 DedeCMS 的模板变量输出!
