dede首页评论数如何调用或显示?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 DEDE建站 正文

使用官方标签 {dede:field} + arcatt

这是最简单、最官方的方法,适用于大多数情况,它依赖于文章的 arctitleflag 属性来标记“有评论”。

dede 首页评论数
(图片来源网络,侵删)

原理: DedeCMS在后台发布文章时,有一个“自定义属性”选项,有评论”这个选项被选中后,系统会在文章的 flag 字段中存入一个字母 c,我们只需要判断 flag 字段中是否包含 c 即可。

操作步骤:

  1. 修改文章模型(可选但推荐): 为了方便管理,建议你在后台的“核心” -> “内容模型管理”中,为你所使用的文章模型添加一个自定义字段,is_comment,类型为“是/否”,在发布文章时手动勾选,这样逻辑更清晰,但如果不修改,直接使用 flag 字段也是可以的。

  2. 在首页模板中添加代码: 登录你的DedeCMS后台,进入“模板” -> “默认模板管理”,找到并编辑你正在使用的首页模板文件(通常是 index.htm)。

    dede 首页评论数
    (图片来源网络,侵删)
  3. 定位到需要显示评论数的位置: 在文章列表循环 {dede:arclist} 内部,找到你想显示评论数的地方,比如文章标题后面。

  4. 插入判断代码: 将以下代码复制并粘贴到指定位置。

    {dede:arclist typeid='' row='10' titlelen='50'}
    <li>
      <a href="[field:arcurl/]">[field:title/]</a>
      <!-- 在这里添加评论数判断代码 -->
      [field:flag runphp='yes']
        $flag = @me;
        if(strpos($flag, 'c') !== false) {
          @me = " (有评论)";
        } else {
          @me = " (暂无评论)";
        }
      [/field:flag]
    </li>
    {/dede:arclist}

代码解释:

  • [field:flag runphp='yes']:获取当前文章的 flag 字段值,并开启PHP运行。
  • $flag = @me;:将 flag 的值赋给变量 $flag
  • if(strpos($flag, 'c') !== false):判断 $flag 字符串中是否包含字母 cstrpos 函数如果找到子字符串则返回其位置(一个数字),否则返回 false,我们使用 !== false 来确保严格判断。
  • @me = " (有评论)";:如果包含 c,则输出“ (有评论)”。
  • @me = " (暂无评论)";:如果不包含 c,则输出“ (暂无评论)”。
  • [/field:flag]:结束标签。

优点:

  • 简单快捷,无需修改数据库。
  • 对系统性能影响小。

缺点:

  • 不精确:它只能判断“有评论”或“无评论”,无法显示具体的评论数量(3条评论”)。
  • 依赖后台手动勾选“有评论”属性,如果发布文章时忘记勾选,即使有评论也不会显示。

使用自定义SQL查询(推荐,可显示具体数量)

如果你想显示具体的评论数量(如“5条评论”),就必须使用自定义SQL来查询 dede_feedback 表(评论表)并统计数量。

原理: 通过 JOIN 连接 dede_archives(文章表)和 dede_feedback(评论表),根据文章ID(aid)进行分组统计,得到每篇文章的评论数。

操作步骤:

  1. 修改首页模板: 同样,进入“模板” -> “默认模板管理”,编辑你的首页模板 index.htm

  2. {dede:arclist} 中使用自定义SQL: 将标准的 {dede:arclist} 标签替换为使用自定义SQL的版本。

    {dede:sql sql='SELECT a.*, 
                  (SELECT COUNT(*) FROM dede_feedback WHERE arcid = a.id) AS commentCount 
           FROM dede_archives a 
           WHERE a.arctypeid IN (这里填你的栏目ID) 
           ORDER BY a.id DESC LIMIT 0, 10'}
      <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 显示具体评论数 -->
        ([field:commentcount/])
      </li>
    {/dede:sql}

代码解释:

  • SELECT a.*, (SELECT COUNT(*) FROM dede_feedback WHERE arcid = a.id) AS commentCount
    • a.*:选择 dede_archives 表(别名 a)的所有字段,比如标题、链接等。
    • (SELECT COUNT(*) FROM ...):这是一个子查询,它会为每一篇主查询的文章执行一次,统计 dede_feedback 表中 arcid 等于当前文章 id 的记录总数。
    • AS commentCount:将统计结果命名为 commentCount,这样我们就可以用 [field:commentcount/] 来调用它。
  • FROM dede_archives a:指定主表为 dede_archives,并起别名为 a
  • WHERE a.arctypeid IN (这里填你的栏目ID):这是筛选条件,如果你想只显示特定栏目下的文章,就把括号里的数字替换成对应的栏目ID,如果想显示所有栏目,可以去掉这个 WHERE 条件,或者用 a.arcrank > -1 代替。
  • ORDER BY a.id DESC LIMIT 0, 10:按文章ID降序排列,并限制只输出10条记录,这和 arclistrow='10' 效果一样。
  • [field:commentcount/]:直接调用我们通过SQL查询得到的评论数量。

优点:

  • 精确:可以显示每篇文章的具体评论数量。
  • 功能强大,逻辑严谨。

缺点:

  • 相比方法一,SQL语句稍复杂。
  • 如果首页文章数量非常多,可能会对数据库造成一定的查询压力,但通常首页显示10-20条,影响可以忽略不计。

总结与对比

特性 方法一 (官方标签) 方法二 (自定义SQL)
功能 只能判断“有/无” 可以显示具体数量
精确度 低,依赖后台操作 高,直接查询数据库
性能 极好,几乎无影响 良好,单次查询开销小
易用性 非常简单,适合新手 需要懂一点SQL
推荐场景 只需要一个简单的“有评论”标记 需要显示“X条评论”等具体数据

最终建议:

  • 如果你的需求仅仅是告诉访客“这篇文章有人评论过”,方法一完全够用,且最简单。
  • 如果你想展示更丰富的信息,已有5条评论”,提升用户体验,强烈推荐使用方法二,这是更专业、更标准的做法。
-- 展开阅读全文 --
头像
c程序设计语言 徐宝文
« 上一篇 04-26
织梦自定义支付接口如何安全高效集成?
下一篇 » 04-26

相关文章

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

目录[+]