第一部分:DedeCMS 实用标签详解
这里的“实用”指的是在日常建站中最常用、最高频的标签。

调用标签
这类标签用于在首页、列表页、内容页等地方直接调用文章、图集等。
a. 调用文章列表(最常用)
这是最核心的标签,用于在首页或列表页调用文章。
标签结构:
{dede:arclist flag='h' 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,3,5' |
row |
调用文章数量。 | row='8' (调用8条) |
infolen |
简介长度(按字符数)。 | infolen='100' |
orderby |
排序方式,常用值:pubdate(发布时间)、click(点击量)、id(文章ID)、sortrank(权重)。 |
orderby='click' (按点击量从高到低) |
orderway |
排序顺序。desc(降序)、asc(升序)。 |
orderway='desc' |
flag |
文章属性,常用值:'h'(头条)、'c'(推荐)、'p'(图片)、's'(跳转),可以组合,如 flag='hc'。 |
flag='h' (只调用头条) |
channelid |
模型ID,默认为1(文章),如果调用图集、软件等,需要指定。 | channelid='2' (调用图集) |
subday |
调用N天内的文章。 | subday='7' (调用最近7天发布的文章) |
noheader |
不包含顶级栏目,当调用子栏目时,防止顶级栏目也被调用。 | noheader='1' |
字段说明(用[field:xxx/]调用):
| 字段名 | 说明 |
|---|---|
[field:title/] |
|
[field:arcurl/] |
文章链接 |
[field:pubdate/] |
发布时间(时间戳格式) |
[field:description/] |
文章简介(需要在后台文章模型中设置) |
[field:litpic/] |
文章缩略图 |
[field:click/] |
文章点击量 |
[field:id/] |
文章ID |
示例:调用首页指定栏目下的最新5条文章,标题显示20个字符
{dede:arclist typeid='5' row='5' titlelen='20' orderby='pubdate'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
b. 调用栏目列表
用于在首页或列表页显示子栏目。
标签结构:

{dede:channel type='son' typeid='2'}
<li><a href="[field:typeurl/]">[field:typename/]</a></li>
{/dede:channel}
常用属性说明:
| 属性名 | 说明 | 示例 |
|---|---|---|
typeid |
父栏目ID,调用此ID下的子栏目。 | typeid='1' (调用ID为1的栏目的子栏目) |
type |
栏目类型。son(子栏目)、self(同级栏目)、top(顶级栏目)。 |
type='son' |
row |
调用栏目数量。 | row='6' |
高级实用标签
a. 首页幻灯片/焦点图调用
通常调用带有flag='p'(图片)属性的推荐文章。
标签结构:
{dede:arclist flag='h' row='5' orderby='pubdate'}
<li>
<a href="[field:arcurl/]">
<img src="[field:litpic/]" alt="[field:title/]">
<span>[field:title/]</span>
</a>
</li>
{/dede:arclist}
操作提示: 在后台发布文章时,勾选“头条”和“图片”属性,即可被此标签调用。
b. 相关文章调用
页下方显示与当前文章相关的文章。
标签结构:
{dede:likearticle row='8' titlelen='24'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}
原理: 默认是按当前文章的关键词来匹配的,如果效果不好,可以去后台“系统” -> “系统基本参数” -> “核心设置”中修改“关键词匹配规则”。
c. 调用指定栏目的子栏目及子栏目下的文章
这是一个非常实用的组合,常用于制作网站的某个专题区块。
标签结构:
{dede:channel type='son' typeid='2'}
<dl>
<dt><a href="[field:typeurl/]">[field:typename/]</a></dt>
<dd>
{dede:arclist row='5' typeid='[field:id/]'}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:arclist}
</dd>
</dl>
{/dede:channel}
说明: [field:id/] 会动态获取到每个子栏目的ID,arclist 标签再用这个ID去调用该栏目下的文章。
d. 调用TAG标签
用于显示热门标签或所有标签。
标签结构:
{dede:tag row='30' sort='month'}
<a href="[field:link/]">[field:tagname/]</a>
{/dede:tag}
常用属性:
row: 调用数量sort: 排序方式,month(按月)、rand(随机)、week(按周)
自定义函数
在字段调用中,我们经常使用 function 来格式化数据。
-
日期格式化:
[field:pubdate function="MyDate('Y-m-d H:i',@me)"/]Y-m-d H:i是目标格式,@me代表字段原始值(时间戳)。 -
截取字符串并加省略号:
[field:title function='cn_substr(@me, 30)'/]cn_substr是DedeCMS的截取函数,30是截取长度。 -
去除HTML标签:
[field:description function='htmlspecialchars(strip_tags(@me))'/]先用strip_tags去除HTML标签,再用htmlspecialchars转义特殊字符,防止XSS攻击。
第二部分:自定义标签方法
当系统内置标签无法满足你的需求时,就需要自定义标签,自定义标签分为两种:
- 修改PHP源码文件(不推荐,升级会丢失)
- 制作自定义标签文件(推荐,更灵活,升级不丢失)
我们重点讲解推荐的方法。
方法:制作自定义标签文件(以调用“最新会员”为例)
假设我们需要一个 {dede:newmember} 标签来调用注册的最新会员。
第一步:创建标签处理文件
在 /include/taglib/ 目录下,创建一个新文件,命名为 newmember.lib.php。
<?php
/**
* DedeCMS 最新会员标签
* 调用方法: {dede:newmember row='10'}
*/
if (!defined('DEDEINC')) exit('Request Error!');
function lib_newmember(&$ctag, &$refObj)
{
global $dsql;
// 获取标签属性
$attlist = "row|10";
FillAttsDefault($ctag->CAttributeMatches, $attlist);
$row = $ctag->GetAtt('row');
// 初始化SQL查询
$innertext = trim($ctag->GetInnerText());
if (empty($innertext)) {
$innertext = '<li><a href="[field:spaceurl/]">[field:uname/]</a></li>';
}
$dsql->SetQuery("SELECT mid, uname, spaceurl FROM `#@__member` ORDER BY mid DESC LIMIT 0, {$row}");
$dsql->Execute('me');
$artlist = '';
while ($row = $dsql->GetArray('me')) {
// 将[field:xxx/]占位符替换为实际值
$fields = array(
'uname' => $row['uname'],
'spaceurl' => $row['spaceurl'] ? $row['spaceurl'] : $GLOBALS['cfg_cmspath'].'/member/index.php?uid='.$row['mid'],
);
$artlist .= str_replace(array_keys($fields), array_values($fields), $innertext);
}
return $artlist;
}
?>
代码解析:
- 文件名和函数名:文件名
newmember.lib.php中的newmember就是你的标签名,函数名lib_newmember必须遵循lib_[标签名]的规则。 - 函数参数:
&$ctag是标签本身,&$refObj是引用对象(通常是页面类)。 $attlist:定义标签可以接受的属性及其默认值。row|10表示row属性,默认值为10。FillAttsDefault:这是一个DedeCMS内置函数,用于将用户设置的属性与默认属性合并,确保所有属性都有值。- SQL查询:这里编写你自己的SQL语句,从
#@__member(会员表) 中查询最新的会员数据。 $innertext:这是标签之间的内容,也就是你自定义的HTML模板,如果用户没有提供,就使用一个默认的模板。- 字段替换:这是最关键的一步,循环查询结果,将模板中的
[field:uname]、[field:spaceurl]等占位符替换为从数据库中获取的实际值。 return $artlist:函数最终返回处理好的HTML字符串。
第二步:在模板中使用自定义标签
你可以在任何DedeCMS模板文件(如首页 index.htm)中像使用普通标签一样使用它。
<h3>最新注册会员</h3>
<ul>
{dede:newmember row='5'}
<li>
<a href="[field:spaceurl/]">[field:uname/]</a>
<span>加入时间:[field:jointime function="MyDate('Y-m-d', @me)"/]</span>
</li>
{/dede:newmember}
</ul>
说明:
{dede:newmember row='5'}:调用最新5个会员。[field:spaceurl/]和[field:uname/]:是我们第一步在PHP文件中定义的字段。[field:jointime/]:会员表中存储的是时间戳,我们同样可以用function来格式化它。
第三步:缓存
模板文件修改后,需要到后台“生成” -> “更新首页”或“更新HTML”,系统会重新编译模板,识别并执行你的新标签。
| 类型 | 标签/方法 | 核心用途 | 备注 |
|---|---|---|---|
| 基础 | {dede:arclist} |
调用文章列表 | 必须掌握,属性和字段要熟悉 |
{dede:channel} |
调用栏目列表 | 用于导航、栏目块 | |
| 高级 | {dede:likearticle} |
调用相关文章 | 页 |
{dede:tag} |
调用标签云 | 用于SEO和内容聚合 | |
| 组合标签 | 复杂的数据结构调用 | 如“栏目+文章”组合 | |
| 自定义 | 创建 xxx.lib.php |
调用非标准数据 | 如会员、商品、订单等 |
| 修改PHP源码 | 深度功能定制 | 不推荐,升级会失效 |
掌握这些实用标签和自定义方法,你就可以游刃有余地应对绝大多数DedeCMS网站的开发需求了,建议从模仿和修改现有标签开始,逐步过渡到编写自己的自定义标签。
