使用DedeCMS自带的 GetArcList 标签(最推荐、最灵活)
这是最标准、最灵活的方法,它通过执行一个SQL查询来获取结果,不会像 {dede:arclist} 那样加载完整的文章数据,因此效率很高。

(图片来源网络,侵删)
场景1:调用当前栏目的文章总数
这种方法可以直接在当前栏目页的模板文件中使用,无需任何额外设置。
代码示例:
{dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid=~id~"}
本栏目共有 <strong>[field:nums/]</strong> 篇文章
{/dede:sql}
代码解析:
{dede:sql ...}:DedeCMS的执行SQL标签。sql="SELECT COUNT(*) AS nums FROM ...":这是标准的SQL查询语句。COUNT(*):统计所有符合条件的记录数。AS nums:将统计结果命名为nums,方便后面调用。FROM dede_archives:文章数据表,如果你的表前缀不是dede_,请修改成你自己的。WHERE typeid=~id~:这是关键。~id~是DedeCMS的一个特殊变量,会自动替换为当前栏目ID,这样就实现了只统计当前栏目下的文章。
[field:nums/]:用来输出上面查询结果中名为nums的字段值。
使用示例: 你可以把它放在栏目页的列表上方或下方,

(图片来源网络,侵删)
<h2>栏目名称:{dede:field.typename/}</h2>
<p>{dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid=~id~"}共有 <strong>[field:nums/]</strong> 篇文章{/dede:sql}</p>
<ul>
{dede:arclist titlelen='42' row='10'}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
场景2:调用指定栏目的文章总数
如果你想在一个页面(比如首页)中显示任意指定栏目的文章数,只需要在SQL语句中写死栏目ID即可。
代码示例:
假设你想获取栏目ID为 5 的文章总数。
{dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid=5"}
指定栏目共有 <strong>[field:nums/]</strong> 篇文章
{/dede:sql}
代码解析:

(图片来源网络,侵删)
- 与上面唯一的区别就是
WHERE typeid=~id~变成了WHERE typeid=5,这里的5就是你想要统计的栏目ID。
进阶用法:获取顶级栏目或子栏目的文章数
- 获取顶级栏目文章数:
WHERE typeid=5 AND topid=0(假设5是顶级栏目ID) - 获取某个顶级栏目下所有子栏目的文章总数(包括子栏目自己的文章):
{dede:sql sql="SELECT COUNT(*) AS nums FROM `dede_archives` WHERE topid=5"} 该顶级栏目及其子栏目共有 <strong>[field:nums/]</strong> 篇文章 {/dede:sql}
使用 arclist 标签的 itemnum 属性(简单但效率较低)
这种方法比较取巧,它利用 arclist 标签的 itemnum 属性来获取文章总数,但会先加载文章数据。
代码示例:
{dede:arclist itemnum='0'}
{/dede:arclist}
你需要在PHP代码中获取这个标签返回的文章数量。这种方法不推荐在模板中直接使用,因为它效率不高,且需要额外的PHP处理。
更规范的写法是配合PHP代码,但这通常需要修改模板文件,不如方法一灵活。
使用自定义函数(适用于全站多处调用)
如果你的网站在很多地方都需要显示文章数,并且希望代码更简洁,可以考虑创建一个自定义函数。
步骤:
-
打开文件:找到并打开
/include/common.func.php文件。 -
添加函数:在文件末尾的
?>之前,添加以下PHP函数:/** * 获取指定栏目的文章总数 * @param int $typeid 栏目ID * @return int 文章数量 */ function GetArticleNum($typeid = 0) { global $dsql; $typeid = intval($typeid); if($typeid == 0) return 0; $query = "SELECT COUNT(*) AS nums FROM `dede_archives` WHERE typeid = {$typeid}"; $row = $dsql->GetOne($query); return $row['nums']; } -
在模板中调用:现在你可以在任何模板文件中使用这个函数了。
调用当前栏目:
本栏目共有 <strong><?=GetArticleNum($typeid)?></strong> 篇文章
注意:在DedeCMS模板中,
$typeid变量可以直接获取当前栏目ID。调用指定栏目(ID为10):
指定栏目共有 <strong><?=GetArticleNum(10)?></strong> 篇文章
优点:
- 代码复用性强,调用非常方便。
- 逻辑与视图分离,更符合开发规范。
缺点:
- 需要修改核心函数文件,如果升级DedeCMS可能会被覆盖。
总结与推荐
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
GetArcList |
灵活、高效、无需修改文件,是DedeCMS官方推荐方式。 | 语法相对固定。 | 绝大多数情况下的首选,特别是调用当前栏目或指定栏目。 |
arclist |
语法简单。 | 效率低,会加载冗余数据,不推荐。 | 不推荐使用。 |
| 自定义函数 | 代码复用性好,调用简洁。 | 需要修改核心文件,有升级风险。 | 网站中大量、多处需要调用文章数时,为了代码整洁使用。 |
对于绝大多数用户,强烈推荐使用第一种方法({dede:sql}),因为它最安全、最高效,且完全满足需求。
