使用系统内置的 GetCount() 函数(最简单、最推荐)
这是 DedeCMS 官方提供的方法,专门用于获取当前栏目(或当前筛选条件下)的文章总数,它效率最高,也最符合织梦的设计思想。

(图片来源网络,侵删)
适用场景: 只需要在列表页的某个位置(比如标题旁边、分页条上方)显示一个固定的总数。
操作步骤:
-
打开您需要显示文章数量的列表页模板文件。
- 通常是
/templets/default/list_栏目ID.htm,/templets/default/list_1.htm。 - 如果使用了自定义模板,请在后台的“模板管理”中找到对应的模板文件。
- 通常是
-
在您希望显示文章数量的地方,插入以下代码:
(图片来源网络,侵删)共有 {dede:field name='count'/} 篇文章
代码解释:
{dede:field name='count'/}是一个字段调用标签。- 在列表页模板中,
field标签可以直接调用当前栏目的各种系统变量。 name='count'就是专门用来获取当前栏目文章总数的。
示例:
假设您想在列表页的标题后面显示文章数量,可以修改模板文件中的标题部分,
<h1 class="tith1">
{dede:field.title/}
<span class="fontcolor">(共有 {dede:field name='count'/} 篇文章)</span>
</h1>
优点:

(图片来源网络,侵删)
- 极其简单:一行代码即可搞定。
- 高效:这是系统原生方法,性能最好。
- 准确:它会自动根据当前栏目的ID、以及可能的附加条件(如按时间、按标签筛选)来计算总数。
使用 arclist 标签调用并统计(最灵活)
如果您想根据更复杂的条件来统计文章数量,或者想在列表页的循环之外获取其他栏目的文章数,arclist 标签是最佳选择。
适用场景:
- 统计当前栏目下的子栏目文章总数。
- 统计带有某个特定关键词的文章数。
- 统计某个特定时间段的文章数。
操作步骤:
-
同样,打开您的列表页模板文件。
-
在需要显示的位置插入以下代码:
{dede:arclist titlelen='0' row='0'} [field:global.autoindex/] {/dede:arclist}
代码解释:
{dede:arclist ...}:文章列表调用标签,len='0'`:标题长度设为0,因为我们不需要显示文章标题,提高效率。row='0':这是关键!row属性用来获取文章数量,当它设置为0时,arclist不会输出任何文章内容,但会返回符合条件的文章总数。[field:global.autoindex/]:这是一个必要的“占位符”,即使row=0,织梦也需要至少一个字段来执行循环。global.autoindex会循环输出1, 2, 3, ...,因为我们不显示它,所以它不会在页面上留下任何痕迹,但能让标签正常工作并返回总数。
进阶示例:
-
统计当前栏目的文章数(与方法一效果相同):
{dede:arclist typeid='{dede:field.id/}' row='0'}[field:global.autoindex/]{/dede:arclist} 篇文章 -
统计当前栏目所有子栏目的文章总数:
{dede:arclist typeid='{dede:field.id/}' row='0' channelid='1'}[field:global.autoindex/]{/dede:arclist} 篇文章typeid='{dede:field.id/}'会自动包含其所有子栏目。
-
包含“织梦”关键词的文章数:
{dede:arclist keyword='织梦' row='0'}[field:global.autoindex/]{/dede:arclist} 篇文章
优点:
- 灵活性极高:可以配合
typeid,keyword,channelid,starttime,endtime等几乎所有arclist支持的属性,实现各种复杂统计。 - 功能强大:不受限于当前栏目,可以跨栏目统计。
使用 SQL 查询(最强大、最底层)
如果您需要实现一些系统标签无法满足的、非常规的统计需求,可以直接执行原生 SQL 查询。
适用场景:
- 统计某个特定自定义模型的文章数。
- 统计满足多个复杂 AND/OR 条件的文章数。
- 统计不同状态(如草稿、已发布)的文章数。
操作步骤:
-
打开列表页模板文件。
-
在需要显示的位置插入以下代码:
{dede:sql sql='SELECT COUNT(*) as c FROM `dede_archives` WHERE typeid = ~typeid~'} 共有 [field:c/] 篇文章 {/dede:sql}
代码解释:
{dede:sql ...}:执行自定义 SQL 语句的标签。SELECT COUNT(*) as c FROMdede_archivesWHERE typeid = ~typeid~:SELECT COUNT(*):这是标准的 SQL 语法,用于计算结果集的行数。as c:将计算结果命名为c,方便后续调用。FROMdedearchives`文章数据通常存储在这个表里(**注意:您的表前缀可能不是dede`,请根据实际情况修改**)。WHERE typeid = ~typeid~:查询条件,只统计当前栏目ID的文章。~typeid~是织梦模板引擎提供的变量,会自动替换为当前栏目的ID,比硬编码{dede:field.id/}更安全、更高效。
[field:c/]:调用 SQL 查询结果中名为c的字段,也就是我们计算出的文章总数。
优点:
- 功能最强大:可以完全掌控数据库查询,实现任何复杂的统计逻辑。
- 性能可控:对于复杂统计,可以针对性地优化 SQL 语句。
缺点:
- 有一定门槛:需要使用者具备基本的 SQL 知识。
- 存在风险:SQL 语句写错,可能会导致页面报错,请务必小心。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
GetCount() |
最简单、最高效、最官方 | 灵活性较低,只能统计当前栏目 | 绝大多数情况下的首选,快速显示当前栏目文章总数。 |
Arclist |
非常灵活,可配合多种属性实现复杂统计 | 代码稍长,性能略低于 GetCount() |
需要跨栏目、按关键词、按时间等复杂条件统计时。 |
SQL |
功能最强大,完全自定义查询 | 有技术门槛,存在出错风险 | 实现系统标签无法满足的、高度定制化的统计需求时。 |
对于 99% 的列表页文章数量统计需求,强烈推荐使用方法一 {dede:field name='count'/},它简单、高效且稳定,只有在方法一无法满足需求时,再考虑使用方法二或方法三。
