使用 DedeCMS 内置标签 {dede:tag}(推荐)
这是最标准、最安全的方法,符合 DedeCMS 的模板引擎规则,您可以在文章内容页模板(article_article.htm)中直接使用。

(图片来源网络,侵删)
基础用法
这个标签会以“,”逗号分隔的形式,输出当前文章的所有标签。
在模板文件 article_article.htm 中,您希望显示标签的位置加入以下代码:
{dede:tag}
<a href='[field:tagurl/]'>[field:tag/]</a>
{/dede:tag}
代码解释:
{dede:tag}...{/dede:tag}:这是标签的开始和结束。[field:tag/]:这是标签的名称,织梦CMS”、“PHP教程”。[field:tagurl/]:这是该标签的链接地址,点击后会跳转到标签列表页面,显示所有包含该标签的文章。
样式与分隔符定制
您可以通过 sort 和 getall 属性来控制标签的输出方式。

(图片来源网络,侵删)
自定义分隔符(默认是逗号)
如果您不想用逗号,可以用 getall='0' 来指定自定义的分隔符。
{dede:tag getall='0'}
[field:tag/] | <!-- 使用 " | " 作为分隔符 -->
{/dede:tag}
按字母顺序排序
如果您希望标签按字母顺序排列,可以添加 sort='asc' 属性(asc 为升序,desc 为降序)。
{dede:tag sort='asc'}
<a href='[field:tagurl/]'>[field:tag/]</a>
{/dede:tag}
显示所有标签(不推荐)
getall='1' 会将所有标签合并成一个字符串,并用逗号分隔,但失去了 <a> 链接结构,通常不用于直接显示标签列表。
{dede:tag getall='1'}
[field:tag/]
{/dede:tag}
使用 PHP 代码(灵活但需谨慎)
这种方法适用于更复杂的逻辑,或者在某些非标准模板位置(如首页、列表页)调用文章标签时使用。请注意,直接在模板中写 PHP 代码需要确保您的服务器环境支持,并且操作不当可能导致网站不安全。
页(article_article.htm)中使用
<?php
// 获取当前文章的ID
$aid = $arcID;
// 引入数据库配置文件
// 如果在系统核心文件中,此步可省略
// require_once(DEDEROOT.'/data/common.inc.php');
// 查询该文章的所有标签
$dsql->SetQuery("SELECT tag FROM `dede_taglist` WHERE aid = '$aid'");
$dsql->Execute();
$tags = array();
while ($row = $dsql->GetArray())
{
$tags[] = "<a href='/tags.php?/".$row['tag']."'>".$row['tag']."</a>";
}
// 用逗号将标签数组连接成字符串
$tag_str = implode(', ', $tags);
// 输出标签
echo $tag_str;
?>
代码解释:
$aid = $arcID;:获取当前文章的ID,$arcID是 DedeCMS 在文章内容页中预设的全局变量。dede_taglist:这是存储文章与标签关联关系的核心数据表。SELECT tag FROM ... WHERE aid = '$aid':从数据库中查询出指定文章ID对应的所有标签名称。implode(', ', $tags):将 PHP 数组中的标签用 连接成一个字符串。echo $tag_str;:最终输出带有链接的标签列表。
在首页或列表页调用某篇文章的标签(高级用法)
如果您想在首页或列表页循环中调用某篇文章的标签,可以结合 {dede:arclist} 标签和 PHP 代码实现。
{dede:arclist titlelen='30' row='5'}
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<!-- 在这里调用当前文章的标签 -->
<div class="tags">
<?php
$aid = $fields['id']; // 获取当前循环文章的ID
$dsql->SetQuery("SELECT tag FROM `dede_taglist` WHERE aid = '$aid'");
$dsql->Execute();
$tags = array();
while ($row = $dsql->GetArray())
{
$tags[] = "<a href='/tags.php?/".$row['tag']."'>".$row['tag']."</a>";
}
echo implode(', ', $tags);
?>
</div>
{/dede:arclist}
注意: 这种方法在列表页循环调用数据库,会严重影响网站性能,不推荐在列表页使用,尤其是在 row 值较大时。
总结与建议
| 特性 | {dede:tag}
| |
|---|---|---|
| 易用性 | 非常高,一行代码搞定。 | 较低,需要懂 PHP 和数据库结构。 |
| 安全性 | 高,官方推荐,经过严格测试。 | 较低,直接操作数据库有风险,需注意 SQL 注入。 |
| 灵活性 | 一般,只能满足常规需求。 | 非常高,可以实现任何自定义逻辑。 |
| 性能 | 高,由模板引擎高效解析。 | 较低,特别是循环调用时,会增加数据库负担。 |
| 适用场景 | 页 (article_article.htm),99% 的需求。 |
非标准页面、复杂逻辑、与其他 PHP 变量交互时。 |
最终建议:
- 如果您只是在文章详情页显示标签,请务必使用方法一
{dede:tag}。 这是最正确、最高效、最安全的方式。 - 只有在方法一无法满足您的特殊需求时,才考虑使用方法二,并且在使用时要格外小心,确保代码的健壮性和安全性。
