使用 GetOneTypeArc() 函数 (最推荐)
这是最常用且最灵活的方法,因为它不仅获取文章数,还获取了当前栏目的其他信息,方便后续扩展。

(图片来源网络,侵删)
适用场景:
在列表页 (list_article.htm页 (article_article.htm) 以及任何需要调用当前栏目信息的地方。
代码示例:
在需要显示文章数的地方,直接插入以下 PHP 代码:
<?php
// 获取当前栏目ID
$typeid = $GLOBALS['typeid'];
// 调用函数获取栏目信息
$typeinfo = GetOneTypeArc($typeid);
// 输出文章数量
// $typeinfo['ispart'] 为 1 表示是外部链接,没有文章
if($typeinfo['ispart'] == 0) {
echo $typeinfo['totalcount'];
} else {
echo "0"; // 或者显示其他提示,如 "链接"
}
?>
代码解析:

(图片来源网络,侵删)
$GLOBALS['typeid']:这是 DedeCMS 的一个全局变量,在列表页和内容页中,它自动保存了当前栏目的 ID。GetOneTypeArc($typeid):这是一个核心函数,用于根据栏目ID查询该栏目的详细信息,它会返回一个包含所有栏目信息的数组。$typeinfo['totalcount']:这是GetOneTypeArc()返回的数组中的一个键,其值就是该栏目下的文章总数(包括子栏目,如果开启了“包含子栏目”)。$typeinfo['ispart']:这是一个判断,如果当前栏目是一个外部链接(链接到其他网站或自定义页面),它的ispart值会是1,这种情况下它本身没有文章,totalcount可能为空或不准确,增加这个判断可以让代码更健壮。
使用 SQL 查询 (灵活且高效)
如果你只需要文章数,或者需要更复杂的查询条件,直接执行 SQL 语句是最高效的方式。
适用场景:
当 GetOneTypeArc() 无法满足需求时,例如需要根据特定条件(如仅统计审核通过的文章)来计算数量。
代码示例:
<?php
// 获取当前栏目ID
$typeid = $GLOBALS['typeid'];
// 查询当前栏目(及其子栏目)的文章数
// 注意:如果你的栏目没有开启“包含子栏目”,需要去掉 AND tp.reid = '$typeid' 这部分
$dsql->SetQuery("SELECT COUNT(*) AS count FROM `#@__archives` ar LEFT JOIN `#@__arctype` tp ON ar.typeid = tp.id WHERE tp.reid = '$typeid' OR tp.id = '$typeid'");
$dsql->Execute();
$row = $dsql->GetObject();
// 输出文章数量
echo $row->count;
?>
代码解析:

(图片来源网络,侵删)
$dsql:这是 DedeCMS 的数据库连接对象,通过它可以执行任何 SQL 语句。SetQuery():设置要执行的 SQL 查询语句。#@__:这是 DedeCMS 的表前缀占位符,在最终执行时会替换为你后台设置的表前缀(如dede_)。WHERE tp.reid = '$typeid' OR tp.id = '$typeid':这个条件是关键。tp.id = '$typeid':统计当前栏目ID下的文章。tp.reid = '$typeid':统计当前栏目ID作为父栏目的所有子栏目下的文章。- 两者结合,就实现了“包含子栏目”的统计效果。如果不想包含子栏目,请只保留
tp.id = '$typeid'。
Execute()/GetObject():执行查询并获取结果。GetObject()将结果集的第一行作为一个对象返回,我们可以通过->count来访问count字段的值。
修改模板文件 (针对列表页标题)
如果你想在列表页旁边直接显示文章数,并且希望它对所有列表页都生效,可以修改列表页模板文件。
适用场景: 希望在所有列表页的标题旁统一显示文章数,且不需要复杂的判断。
操作步骤:
- 打开你的列表页模板文件,通常是
/templets/default/list_article.htm。 - 找到显示栏目标题的地方,代码通常是这样的:
<h1>{dede:field name='typename'/}</h1> - 将其修改为:
<h1> {dede:field name='typename'/} <span class="article-count">([field:totalcount/])</span> </h1> - 保存文件并上传到服务器。
代码解析:
{dede:field name='typename'/}:这是 DedeCMS 的模板标签,用于输出当前栏目的名称。[field:totalcount/]:这是另一个模板标签,它会在列表页被解析时,自动被当前栏目的文章总数所替代,这个标签是 DedeCMS 在列表页环境内置好的,无需调用 PHP 函数即可使用。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
GetOneTypeArc() |
最推荐,代码简洁,获取信息全面,兼容性好。 | 需要一点 PHP 基础。 | 绝大多数情况,尤其是在内容页、列表页或自定义页面中需要显示数量时。 |
| SQL 查询 | 性能最高,灵活性最强,可以添加任何 WHERE 条件。 | 代码稍复杂,需要了解 SQL 语句。 | 需要特殊统计逻辑(如按状态、按时间筛选)时。 |
| 修改模板 | 简单直接,对所有列表页生效,维护方便。 | 仅适用于列表页,功能单一。 | 希望在所有列表页标题旁统一显示文章数时。 |
对于绝大多数用户来说,方法一 (GetOneTypeArc) 是首选,因为它既简单又强大。
