dede未审核文章的tag标签为何不显示?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 DEDE建站 正文
  1. 数据查询层面:获取文章列表的SQL语句没有包含未审核的文章。
  2. 标签调用层面:生成标签云或相关标签的标签调用代码,没有考虑到未审核文章的状态。

下面我将从这两个层面,为您提供详细的排查和解决方案。

dede未审核文章的tag标签不显示
(图片来源网络,侵删)

问题根源分析

要解决这个问题,我们首先要明白DedeCMS的工作流程:

  1. 文章列表:你在后台看到文章列表,或者在首页、栏目页调用文章列表时,通常是通过 GetArcList 等函数实现的,这些函数默认的查询条件是 arcrank >= 0,即只显示已审核(arcrank=0)和推荐(arcrank=-1)等特殊状态的文章,而忽略了 arcrank=1(待审核)的文章。
  2. 标签生成:当你在文章内容页调用 {dede:tag} 标签时,系统会根据当前文章的ID,去 dede_taglist 表中查找关联的标签,而 dede_taglist 表中的数据,是在文章发布时,由系统自动生成的,如果文章从未被“发布”过(即一直是未审核状态),它就不会触发这个生成过程,自然也就没有记录在 dede_taglist 表里。

解决问题的关键在于:确保在需要显示未审核文章的页面,查询语句能包含它们;并且确保这些未审核文章在发布时能正确生成标签记录。


解决方案

请根据你的具体需求,选择对应的解决方案。

让未审核文章的Tag在显示

这是最常见的需求,比如在后台“预览”未审核文章时,希望看到它应有的标签。

dede未审核文章的tag标签不显示
(图片来源网络,侵删)

原因:调用文章内容的SQL语句 (GetArticleContent) 默认也只查 arcrank >= 0 的文章。

解决方法

找到并修改 /include arc.archives.class.php 文件,这是处理文章内容的核心文件。

  1. 用代码编辑器打开 /include/arc.archives.class.php
  2. 找到 SelectOneArchive() 函数(通常在文件的开头部分)。
  3. 在该函数的SQL查询语句中,找到 WHERE 子句,将 AND arc.arcrank >= 0 这部分删除注释掉

修改前(大概在第50行左右):

dede未审核文章的tag标签不显示
(图片来源网络,侵删)
$this->Fields = $this->dsql->GetOne("SELECT * FROM `dede_archives` WHERE id='$aid' AND arcrank >= 0 ");

修改后:

// 去掉 arcrank >= 0 的限制,以获取所有状态的文章
$this->Fields = $this->dsql->GetOne("SELECT * FROM `dede_archives` WHERE id='$aid' ");

修改完成后,保存文件即可。

注意:这个修改会影响全站所有调用文章内容的地方,意味着所有未审核的文章(即使不在前台显示)都可以被程序读取到,这通常是我们预览文章时希望看到的。


让未审核文章的Tag在标签云相关文章中显示

原因:生成标签云或相关文章的函数(如 GetTags)在查询时,默认也是关联已审核的文章。

解决方法

找到并修改 /include/taglib/tag.lib.php 文件,这是处理标签相关的核心文件。

  1. 用代码编辑器打开 /include/taglib/tag.lib.php
  2. 找到 lib_tag() 函数。
  3. 在该函数的SQL查询语句中,找到 WHERE 子句,将 AND arc.arcrank >= 0 这部分删除注释掉

修改前(通常在函数内):

$query = "SELECT tagid,tagname FROM `dede_taglist` WHERE arcrank >= 0 GROUP BY tagid ORDER BY count DESC";

修改后:

// 去掉 arcrank >= 0 的限制,以获取所有文章的标签
$query = "SELECT tagid,tagname FROM `dede_taglist` GROUP BY tagid ORDER BY count DESC";

修改完成后,保存文件即可。


手动为已存在的未审核文章补充Tag标签

如果你的未审核文章已经存在,但没有生成标签记录,你需要手动补充。

后台单个操作(推荐)

  1. 在后台找到那篇未审核的文章。
  2. 点击“修改”进入编辑页面。
  3. 在文章编辑页面的“TAG标签”输入框中,重新输入一遍你想要的标签(即使之前有,也再输一遍)。
  4. 不要直接点“保存”,而是点击“更新文档”按钮(这个按钮会重新生成文档,包括标签)。
  5. 操作完成后,这篇文章的标签就会被写入 dede_taglist 表。

数据库批量操作(谨慎使用)

如果未审核文章很多,可以批量操作数据库。

  1. 进入你的数据库管理工具(如phpMyAdmin)。
  2. 找到 dede_archivesdede_taglist 两个表。
  3. 假设你已经知道哪些文章需要补充标签,可以先在 dede_archives 表中找出它们的ID,
    SELECT id, title FROM dede_archives WHERE arcrank = 1;
  4. 你需要一个能根据文章ID生成标签的脚本,这比较复杂,不如使用方法一的“更新文档”功能来得直接和稳妥。强烈推荐使用方法一

总结与最佳实践

场景 问题文件 修改方法 效果
不显示未审核文章的Tag /include/arc.archives.class.php 删除 SelectOneArchive() 函数中 arcrank >= 0 的条件。 页(如预览)读取到未审核文章的标签。
标签云/相关文章不显示未审核文章的Tag /include/taglib/tag.lib.php 删除 lib_tag() 函数中 arcrank >= 0 的条件。 标签云和相关文章会包含来自未审核文章的标签。
为已有未审核文章补充Tag 后台文章编辑页 进入编辑页,重新输入Tag,点击“更新文档”。 为单篇文章补充或修复缺失的标签记录。

重要提示: 在进行任何文件修改前,请务必备份这些文件,以防修改出错导致网站异常,修改后,建议清除一下DedeCMS的缓存(后台-系统-SQL命令运行器,执行 DEL FROM dede_arccache),以确保更改生效。

通过以上步骤,你应该可以解决“DedeCMS未审核文章的tag标签不显示”的问题。

-- 展开阅读全文 --
头像
C语言runtime error是什么原因导致的?
« 上一篇 前天
蓝色大气简洁企业网站模板有何优势?
下一篇 » 前天

相关文章

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

目录[+]