使用官方自带的标签(最推荐、最稳定)
这是官方提供的标准方法,兼容性最好,也最不容易出错。

(图片来源网络,侵删)
标签代码:
{dede:tag type='current'}
<a href='[field:link/]'>[field:tagname/]</a>
{/dede:tag}
代码解析:
{dede:tag type='current'}:这是调用标签的起始命令。type='current':这是关键参数,表示只调用当前这篇文档的标签,如果不写这个参数,它会调用全站的随机标签,这通常不是我们想要的。
[field:link/]:这是标签的链接地址,会自动跳转到标签列表页。[field:tagname/]:这是标签的名称。{/dede:tag}:标签的结束命令。
完整示例(带样式):
在实际使用中,我们通常会给标签添加一些样式,比如用逗号分隔,或者给标签加上背景色。
示例1:用逗号分隔
<p>本文标签:
{dede:tag type='current'}
<a href='[field:link/]'>[field:tagname/]</a>
{dede:tag}
{else /
暂无标签
{/dede:tag}
</p>
注意:这里的 {else /} 和 {/dede:tag} 的闭合方式是旧版本DedeCMS的写法,如果你的版本较新(如DedeCMS 5.7+),推荐使用下面的写法。
示例2:更现代的写法(推荐用于DedeCMS 5.7+)

(图片来源网络,侵删)
<div class="article-tags">
<span>标签:</span>
{dede:tag type='current'}
<a href="[field:link/]" class="tag">[field:tagname/]</a>
{/dede:tag}
</div>
然后你可以在CSS文件中为 .tag 类添加样式:
.article-tags {
margin-top: 20px;
font-size: 14px;
}
.article-tags .tag {
display: inline-block;
background-color: #f0f0f0;
color: #333;
padding: 2px 8px;
margin: 0 5px 5px 0;
border-radius: 3px;
text-decoration: none;
}
.article-tags .tag:hover {
background-color: #007bff;
color: #fff;
}
通过SQL查询调用(灵活性强)
如果官方标签无法满足你的需求(例如需要更复杂的排序或过滤),你可以直接在模板中使用SQL标签进行查询。
标签代码:
{dede:sql sql='SELECT tag FROM `dede_taglist` WHERE aid = ~id~'}
<a href='/tags/[field:tag function="urlencode(@me)"/].html'>[field:tag/]</a>
{/dede:sql}
代码解析:
{dede:sql ...}:DedeCMS的SQL查询标签。sql='...':SQL查询语句。SELECT tag FROM ...:从dede_taglist这个表中查询tag(标签名)字段。WHERE aid = ~id~:这是关键。aid是文章ID,~id~是DedeCMS的一个特殊变量,会自动被替换为当前文章的ID,这样就实现了只查询当前文章标签的目的。
[field:tag/]:获取查询结果中的tag字段值,也就是标签名。function="urlencode(@me)":这是一个函数,对标签名进行URL编码,这是非常重要的一步,可以确保中文标签在URL中是合法的,避免乱码或404错误,标签“网站建设”会被编码为“%E7%BD%91%E7%AB%99%E5%BB%BA%E8%AE%BE”。/tags/[field:tag function="urlencode(@me)"].html:这是标签页的默认链接规则,如果你的网站设置了其他规则,请相应修改。
修改PHP文件实现(终极方案,不推荐新手)
如果你发现以上方法在特定版本下仍然无效,或者你想实现更底层、更定制化的功能,可以考虑直接修改PHP文件。这种方法有风险,可能导致网站升级困难,请谨慎操作,并提前备份文件。
-
找到并打开文件: 打开
include/common.func.php文件。 -
在文件末尾添加函数: 在
?>之前,添加如下PHP函数:/** * 获取当前文章的所有标签 * @param int $aid 文章ID * @return string 标签链接HTML */ function GetTags($aid) { global $dsql; $tags = ''; $query = "SELECT tag FROM `dede_taglist` WHERE aid='$aid' "; $dsql->Execute('me',$query); while($row = $dsql->GetArray('me')) { $tags .= "<a href='/tags/".urlencode($row['tag']).".html'>".$row['tag']."</a> "; } return $tags; } -
在模板中调用: 在你的内容页模板(通常是
article_article.htm)中,使用如下代码调用:<div class="article-tags"> <span>标签:</span> {dede:field.name='GetTags' function='GetTags(@me)'/} </div>{dede:field.name='GetTags'}:调用我们刚刚定义的GetTags函数。function='GetTags(@me)':将当前文章的ID(@me会自动传递当前文章ID)作为参数传入GetTags函数。
总结与对比
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 官方标签 | 最简单、最稳定、官方支持 | 灵活性相对较低 | ⭐⭐⭐⭐⭐ (首选) |
| SQL标签 | 灵活性高,可自定义查询 | 需要了解基本SQL,URL编码必须手动处理 | ⭐⭐⭐⭐ (官方标签失效时的备选) |
| 修改PHP | 功能最强大,完全自定义 | 有风险,破坏系统文件,升级困难 | ⭐ (仅高级开发者,在特殊需求下使用) |
给你的建议:
- 请首先尝试【方法一】,它能解决99%的需求。
- 方法一】无效或样式不好控制,再尝试【方法二】。
- 除非你是DedeCMS的开发者,否则不要轻易使用【方法三】。
希望这些信息能帮到你!
