在文章列表页(如首页、列表页)调用评论数
这是最常见的需求,比如在首页的文章列表中显示每篇文章的评论数量。

(图片来源网络,侵删)
核心代码
在文章列表的循环标签 {dede:list} 或 {dedarclist} 内部,使用以下代码:
[field:id function="GetTotalArc(@me)"/]
完整示例
假设你的首页文章列表模板文件是 index_article.htm,你希望标题后面显示评论数。
{dede:arclist row="8" titlelen="30"}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>评论:[field:id function="GetTotalArc(@me)"/]</span>
</li>
{/dede:arclist}
代码解释:
{dede:arclist ...}: 这是 DedeCMS 的文章列表循环标签,用于获取一篇文章列表。[field:id ...]: 这是获取当前文章 ID 的字段。function="GetTotalArc(@me)": 这是关键部分。function: 表示调用一个函数。GetTotalArc: 这是 DedeCMS 内置的一个专门用于 获取文章总评论数(包括子评论/回复) 的函数。@me: 这是一个占位符,代表当前字段的原始值,在这里就是[field:id]的值,也就是文章的 ID。[field:id function="GetTotalArc(@me)"]的完整意思是:获取当前文章的 ID,然后把这个 ID 传递给GetTotalArc函数,并将函数返回的评论数显示出来。
页(文章详情页)调用评论数
在文章详情页,你同样可以使用 GetTotalArc 函数来获取当前文章的总评论数。

(图片来源网络,侵删)
核心代码
页模板(如 article_article.htm)中,直接使用:
[field:id function="GetTotalArc(@me)"/]
完整示例
在文章详情页的某个位置,比如标题下方或评论区上方,显示评论总数。
<h1>[field:title/]</h1>
<div class="info">
发布时间:[field:pubdate function="MyDate('Y-m-d H:i:s',@me)"/]
作者:[field:writer/]
浏览量:[field:click/]
评论数:<strong>[field:id function="GetTotalArc(@me)"]</strong>
</div>
[field:body/]
<!-- 评论区 -->
{dede:feedback}
...
{/dede:feedback}
调用当前文章的评论条数(不包括回复)
如果你只想获取一级评论的数量,而不包括对评论的回复,可以使用 GetOneComments 函数。
核心代码
[field:id function="GetOneComments(@me)"/]
与 GetTotalArc 的区别:

(图片来源网络,侵删)
GetTotalArc(): 总评论数,包含所有层级的评论和回复。GetOneComments(): 一级评论数,只计算用户直接对文章发表的评论,不计算对评论的回复。
使用场景
- 在文章列表页,如果想显示一个更简洁的评论数(比如只显示“5条评论”而不是“5条讨论”),
GetOneComments可能更合适。 - 在详情页,如果想区分“评论”和“回复”,可以先调用
GetOneComments显示评论数,再用其他方式展示回复。
在自定义SQL或PHP代码中调用
如果你需要在更复杂的地方调用评论数,比如在自定义模型页面或通过PHP代码,可以直接调用 DedeCMS 的数据库查询函数。
核心PHP代码
<?php
// 1. 引入 DedeCMS 的核心文件
// (如果是在模板中,通常已经全局化,无需再次引入)
require_once(dirname(__FILE__)."/include/common.inc.php");
// 2. 定义文章ID
$aid = 10; // 假设你要查询的文章ID是 10
// 3. 使用 DedeCMS 的内置函数(推荐)
// 获取总评论数(包括回复)
$total_comments = GetTotalArc($aid);
// 获取一级评论数
$one_comments = GetOneComments($aid);
echo "文章ID为 {$aid} 的总评论数是: {$total_comments}<br>";
echo "文章ID为 {$aid} 的一级评论数是: {$one_comments}";
// 4. 或者直接查询数据库(不推荐,除非有特殊需求)
/*
$dsql = new DedeSql(false);
$dsql->SetQuery("SELECT COUNT(*) as c FROM `dede_feedback` WHERE `aid` = '$aid' AND `ischeck` = 1");
$dsql->Execute();
$total_comments_db = $dsql->GetField('c');
echo "<br>通过数据库查询的总评论数是: {$total_comments_db}";
$dsql->Close();
*/
?>
总结与建议
| 需求场景 | 推荐代码 | 说明 |
|---|---|---|
| 文章列表页 | [field:id function="GetTotalArc(@me)"/] |
最常用,显示所有评论和回复的总数。 |
| 文章详情页 | [field:id function="GetTotalArc(@me)"/] |
同上,用于展示当前文章的完整评论情况。 |
| 只需一级评论 | [field:id function="GetOneComments(@me)"/] |
当你只想统计用户直接评论,不包含回复时使用。 |
| PHP代码中调用 | GetTotalArc($aid) |
在非模板文件中,通过PHP函数直接获取。 |
最佳实践:
- 优先使用
GetTotalArc:在绝大多数情况下,这个函数能满足需求,并且是 DedeCMS 官方提供的标准方法,兼容性最好。 - 检查缓存:DedeCMS 有强大的缓存机制,如果你修改了模板但看到的数据没有更新,请记得在后台“系统 -> 站点缓存管理”中清空缓存再刷新页面。
- 权限问题:
GetTotalArc函数会自动过滤掉未审核的评论(ischeck=0),所以它只计算已公开的评论数,这通常是符合预期的。
希望这些信息能帮助你成功调用 DedeCMS 的评论数!
