- 页 (
article_article.htm):获取当前文章的所有标签。 - 在标签列表页 (
taglist.htm):获取当前正在被浏览的标签名称。
下面我将分别提供 SQL 查询语句和更推荐的 PHP 代码实现方法。

页获取当前文章的 Tags
假设你正在修改文章模板 article_article.htm,并且想获取这篇文章关联的所有标签,以便在页面上显示,标签:织梦, PHP, SQL”。
方法 A:直接使用 SQL 查询 (不推荐,但能解决问题)
这种方法需要你知道当前文章的 ID,并且手动编写 SQL 语句,它比较繁琐,且不如 DedeCMS 自带函数灵活。
前提条件:
- 你知道当前文章的 ID,通常可以通过
{$aid}变量获取。
SQL 查询语句:

这个查询需要关联 dede_archives (文章主表)、dede_taglist (标签关联表) 和 dede_tagindex (标签索引表) 三张表。
SELECT t.tid, t.tagname FROM dede_tagindex t JOIN dede_taglist l ON t.tid = l.tid WHERE l.aid = [文章ID] ORDER BY l.tagid ASC;
如何使用:
你需要将 [文章ID] 替换为实际的数字,在模板中,你不能直接执行 SQL,通常需要通过自定义函数或修改 PHP 文件来实现,这非常麻烦。强烈不推荐在模板中直接写 SQL。
方法 B:使用 DedeCMS 自带 PHP 函数 (强烈推荐)
DedeCMS 已经封装好了获取文章标签的函数,这才是正确、高效、安全的方式。
在模板文件 article_article.htm 中:
DedeCMS 在解析文章页时,已经将当前文章的标签信息存入了 Tags 变量中,你只需要直接循环使用即可。
{dede:field name='tags' runphp='yes'}
if(!empty(@me)){
$tags = '';
$tagArray = explode(',', @me);
foreach($tagArray as $tag){
$tags .= '<a href="/tag/'.urlencode($tag).'.html">'.$tag.'</a> ';
}
@me = $tags;
}else{
@me = '暂无标签';
}
{/dede:field}
代码解释:
{dede:field name='tags'}: 获取当前文章的标签字符串,格式是 "标签1,标签2,标签3"。runphp='yes': 启用 PHP 解析。explode(',', @me): 将标签字符串按逗号分割成一个数组。foreach($tagArray as $tag): 循环数组中的每一个标签。urlencode($tag): 对标签进行 URL 编码,以确保特殊字符(如空格、中文)在 URL 中是合法的。@me = $tags;: 将拼接好的 HTML 字符串重新赋值给@me变量,最终在页面上输出。
更简洁的写法: 如果你的网站环境支持,可以直接这样写,DedeCMS 会自动处理链接。
{dede:tag type='list'}
<a href='[field:link/]'>[field:tagname/]</a>
{/dede:tag}
这个标签专门用于在文章页循环输出标签,非常方便。
在标签列表页获取当前 Tag 的名称
当你访问 http://你的域名/tags.php?/标签名/ 这样的页面时,你希望在 taglist.htm 模板中获取到这个“标签名”。
方法 A:通过 URL 参数获取 (标准方法)
在 taglist.htm 模板中,当前标签的名称已经被存放在 {$tag} 这个变量里了,你直接使用即可。
在模板文件 taglist.htm 中:
<h1>正在浏览标签: <span style="color: #ff5500;">{$tag}</span> 的相关文章</h1>
<!-- 这里是文章列表循环 -->
{dede:list pagesize='10'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
</li>
{/dede:list}
直接使用 {$tag} 变量是最简单直接的方式。
方法 B:通过 SQL 查询 (如果需要获取标签ID等其他信息)
如果你不仅需要标签名,还需要标签的 ID、文章数等信息,那么就需要查询数据库了。
前提条件:
- 你知道当前标签的名称,可以通过
$_GET['tag']在PHP代码中获取,或者在模板中通过{$tag}获取。
SQL 查询语句:
假设你已经知道了标签名称 "织梦CMS",你想从 dede_tagindex 表中获取它的详细信息。
SELECT tid, tagname, count FROM dede_tagindex WHERE tagname = '织梦CMS';
如何使用:
这个查询同样不能直接在模板里用,通常你需要修改 taglist.php 这个文件,在它处理页面逻辑的时候执行查询,然后把结果传递给模板。
示例:修改 taglist.php
打开 /include/taglist.php 文件,找到类似下面的代码段(通常在 if($tag != '') 条件分支里):
// 在 taglist.php 中找到大约第60行左右的代码
if($tag != '')
{
$tags = explode(',', $tag);
$tagids = array();
foreach($tags as $k=>$t){
$row = $dsql->GetOne("SELECT tid FROM `dede_tagindex` WHERE tagname like '{$t}' ");
if(is_array($row)){
$tagids[] = $row['tid'];
}
}
// ... 后续逻辑
}
你可以在这里添加自己的查询逻辑,
// 在 foreach 循环内部或外部,获取当前标签的详细信息
$tagname = $tags[0]; // 假设我们只取第一个标签
$tagInfo = $dsql->GetOne("SELECT tid, tagname, count FROM `dede_tagindex` WHERE tagname = '{$tagname}'");
// 然后将 $tagInfo 赋值给一个模板变量
$dtp2->Assign('tagDetail', $tagInfo);
之后,你就可以在 taglist.htm 中通过 {dede:field.name='tagDetail'/} 来访问这些数据了,{dede:field.name='tagDetail'/}[field:tagname /]。
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 文章页获取标签 | 使用 {dede:field name='tags'} 或 {dede:tag}
| |
| 标签页获取标签名 | 直接使用模板变量 {$tag} |
系统已准备好变量,直接调用即可。 |
| 复杂标签信息获取 | 修改 PHP 文件(如 taglist.php)并执行 SQL |
当模板变量无法满足需求(如需要ID、计数等)时,通过后端PHP处理更灵活。 |
对于绝大多数情况,优先使用 DedeCMS 提供的模板变量和标签,尽量避免在模板中直接写 SQL 查询。
