核心原理
织梦的文章标签系统是通过一个关联表 dede_archives_tag 来实现的,这个表存储了文章ID(aid)和标签ID(tid)的对应关系,调用当前文章的Tag,核心步骤就是:

- 获取当前文章的ID(
$aid)。 - 根据这个
$aid,查询dede_archives_tag表,找出所有对应的标签ID(tid)。 - 根据查出的标签ID,再查询
dede_tagindex表,获取标签的名称(tagname)和链接(link)。 - 将这些标签以您想要的格式(如列表、逗号分隔等)输出到页面上。
使用官方提供的 {dede:tag} 标签(最简单、推荐)
这是织梦官方内置的标签,专门用于获取当前文章的Tag,使用起来最简单,无需任何PHP代码。
适用场景:在文章内容页(article_article.htm)中调用。
基本语法:
{dede:tag}
<a href='[field:tagurl/]'>[field:tagname/]</a>
{/dede:tag}
代码解析:

{dede:tag}...{/dede:tag}:这是一个循环标签,会自动循环输出当前文章的所有标签。[field:tagurl/]:输出该标签的链接地址。/tags.php?/标签名/[field:tagname/]:输出该标签的名称。
示例1:默认样式(每个标签一行)
<p>本文标签:</p>
<ul>
{dede:tag}
<li><a href='[field:tagurl/]'>[field:tagname/]</a></li>
{/dede:tag}
</ul>
示例2:逗号分隔样式
如果希望所有标签在同一行,并用逗号隔开,可以这样写:
<p>本文标签:{dede:tag}[field:tagname/]{/dede:tag}</p>
注意:这种写法会直接在每个标签名后面输出,没有分隔符,如果需要逗号,可以在循环外面处理,或者使用更灵活的方法二。
使用自定义函数(最灵活)
当官方标签无法满足您的复杂需求时(需要自定义链接、添加样式、或调用到非文章内容页),可以编写一个自定义函数。
适用场景:
- 需要对标签进行复杂格式化(如添加CSS类、自定义链接)。
- 在列表页、首页等其他页面调用当前文章的Tag(不推荐,但技术上可行)。
- 需要在标签之间添加自定义分隔符(如逗号、竖线)。
操作步骤:
-
创建自定义函数文件 在
/include/helpers/目录下创建一个新文件,extend.helper.php,如果这个文件已经存在,直接在其中添加代码即可。 -
在文件中添加函数代码
在
extend.helper.php文件中,加入以下PHP函数:<?php if(!defined('DEDEINC')) exit('Request Error!'); /** * 获取当前文章的所有标签 * @param int $aid 文章ID * @param string $style 输出样式,默认为 'a',输出为链接 * @param string $sep 分隔符,默认为空 * @return string */ function GetTags($aid, $style = 'a', $sep = '') { global $dsql; $tags = ''; $query = "SELECT tag FROM `dede_tagindex` a LEFT JOIN `dede_archives_tag` b ON a.id=b.tid WHERE b.aid='$aid'"; $dsql->Execute('me', $query); while($row = $dsql->GetArray('me')) { if($style == 'a') { $tags .= "<a href='/tags.php?/".$row['tag']."/'>".$row['tag']."</a>" . $sep; } else { $tags .= $row['tag'] . $sep; } } $tags = trim($tags, $sep); return $tags; } ?>代码解析:
- 函数名
GetTags可以自定义。 $aid:需要传入文章ID。$style:控制输出格式。'a'表示输出为<a>链接,其他值(如空)则只输出标签名。$sep:标签之间的分隔符, 或 。- 函数会查询数据库并拼接好最终的HTML字符串。
- 函数名
-
在模板中调用函数
在您的文章内容页模板(
article_article.htm)中,使用{dede:field}标签来调用这个函数。示例1:调用函数并传入文章ID
{dede:field.id function='GetTags(@me)'/}这里的
@me会自动替换为当前字段的值,也就是文章ID。示例2:调用函数并指定分隔符
<p>标签:{dede:field.id function='GetTags(@me, "", ",")'/}</p>这将输出类似:
标签:织梦,CMS,教程示例3:调用函数并输出为链接,带CSS样式
<div class="article-tags"> {dede:field.id function='GetTags(@me, "a", " | ")'/} </div>这将输出类似:
<div class="article-tags"> <a href='/tags.php?/织梦/'>织梦</a> | <a href='/tags.php?/CMS/'>CMS</a> | <a href='/tags.php?/教程/'>教程</a> </div>
直接使用SQL查询(不推荐,但作为了解)
这种方法直接在模板中写SQL语句,非常灵活,但也破坏了织梦标签的封装性,可读性差,且不易维护。除非您有特殊需求,否则不推荐使用。
适用场景:需要极度的自定义,且不想创建新函数。
代码示例:
{dede:sql sql='SELECT tag FROM `dede_tagindex` a LEFT JOIN `dede_archives_tag` b ON a.id=b.tid WHERE b.aid=~aid~'}
<a href='/tags.php?/[field:tag/]/'>[field:tag/]</a>
{/dede:sql}
注意:
~aid~是织梦模板引擎中的一个特殊变量,会自动被替换为当前文章的ID,这种方法虽然能实现,但可读性和维护性远不如前两种方法。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
{dede:tag} |
最简单、最官方,代码清晰,无需额外操作。 | 灵活性较低,难以自定义复杂格式和分隔符。 | ★★★★★ (在文章内容页首选) |
| 自定义函数 | 最灵活,可完全控制输出格式、样式和分隔符。 | 需要创建和修改PHP文件,对新手稍复杂。 | ★★★★☆ (需要自定义时强烈推荐) |
| 直接SQL | 极度灵活,无需创建文件。 | 可读性差,不易维护,破坏了模板结构。 | ★☆☆☆☆ (仅作为最后的技术备选) |
给您的建议:
- 如果您只是在文章内容页显示标签,请直接使用 方法一,这是最标准、最正确的做法。
- 如果您想给标签添加特定的CSS类(如
class="tag"),或者想用逗号、竖线等符号优雅地分隔标签,请使用 方法二,这是最专业和可扩展的做法。
