dede sql获取当前 tag

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文
  1. 页 (article_article.htm):获取当前文章的所有标签。
  2. 在标签列表页 (taglist.htm):获取当前正在被浏览的标签名称。

下面我将分别提供 SQL 查询语句和更推荐的 PHP 代码实现方法。

dede sql获取当前 tag
(图片来源网络,侵删)

页获取当前文章的 Tags

假设你正在修改文章模板 article_article.htm,并且想获取这篇文章关联的所有标签,以便在页面上显示,标签:织梦, PHP, SQL”。

方法 A:直接使用 SQL 查询 (不推荐,但能解决问题)

这种方法需要你知道当前文章的 ID,并且手动编写 SQL 语句,它比较繁琐,且不如 DedeCMS 自带函数灵活。

前提条件

  • 你知道当前文章的 ID,通常可以通过 {$aid} 变量获取。

SQL 查询语句

dede sql获取当前 tag
(图片来源网络,侵删)

这个查询需要关联 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}

代码解释

  1. {dede:field name='tags'}: 获取当前文章的标签字符串,格式是 "标签1,标签2,标签3"。
  2. runphp='yes': 启用 PHP 解析。
  3. explode(',', @me): 将标签字符串按逗号分割成一个数组。
  4. foreach($tagArray as $tag): 循环数组中的每一个标签。
  5. urlencode($tag): 对标签进行 URL 编码,以确保特殊字符(如空格、中文)在 URL 中是合法的。
  6. @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} 简单、高效、安全,符合 DedeCMS 设计理念。
标签页获取标签名 直接使用模板变量 {$tag} 系统已准备好变量,直接调用即可。
复杂标签信息获取 修改 PHP 文件(如 taglist.php)并执行 SQL 当模板变量无法满足需求(如需要ID、计数等)时,通过后端PHP处理更灵活。

对于绝大多数情况,优先使用 DedeCMS 提供的模板变量和标签,尽量避免在模板中直接写 SQL 查询。

-- 展开阅读全文 --
头像
dede如何更新flash插件?
« 上一篇 2025-12-23
织梦 templets 只读
下一篇 » 2025-12-23

相关文章

取消
微信二维码
支付宝二维码

目录[+]