使用 GetArcList 标签(最推荐,最灵活)
这是最常用也是最灵活的方法,它通过一个临时的 SQL 查询来获取当前栏目的文章数,不会像 arclist 那样加载完整的文章数据,因此性能较好。

(图片来源网络,侵删)
适用场景:在栏目页、列表页、内容页等任何需要显示当前栏目文章数量的地方。
代码示例:
{dede:arclist titlelen='50' row='0'}
<!-- 这个 arclist 标签只用来获取当前栏目ID,row='0' 表示不输出任何文章内容 -->
{/dede:arclist}
当前栏目下的文章数量为:[field:total /] 篇
代码解析:
{dede:arclist ...}:我们使用arclist标签,但主要目的不是为了调用文章列表。typeid='[field:id/]:这是关键,我们通过[field:id/]获取当前栏目的 ID,并将其作为typeid参数传递给arclist标签,这样,arclist就只会查询当前栏目下的文章。- 注意:这个
[field:id/]标签必须在arclist标签的内部使用,才能正确获取到arclist所在环境的栏目ID,如果你直接在模板里写[field:id/],它获取的是当前页面的栏目ID,这通常是可行的,但更严谨的做法是像上面那样,把它嵌套进去。
- 注意:这个
row='0':设置row为 0,表示不输出任何文章列表,只进行后台统计,这能有效减少不必要的资源消耗。[field:total /]:这是arclist标签的一个特殊底层字段,它直接输出查询到的文章总数。
更简洁的写法(在栏目页或列表页):

(图片来源网络,侵删)
如果你所在的页面本身就是栏目页或列表页(list_article.php),arclist 会自动识别当前栏目,所以可以省略 typeid 属性。
{dede:arclist row='0'}
当前栏目下的文章数量为:[field:total /] 篇
{/dede:arclist}
使用 SQL 查询标签 {dede:sql}
这种方法直接执行 SQL 语句,非常直接,适合对 SQL 比较熟悉的用户。
适用场景:任何需要自定义查询的地方,可以获取更复杂的统计信息(如按时间、按状态等)。
代码示例:

(图片来源网络,侵删)
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` WHERE typeid = ~typeid~"}
当前栏目下的文章数量为:[field:c /] 篇
{/dede:sql}
代码解析:
{dede:sql ...}:调用 SQL 查询标签。sql="...":在这里编写你的 SQL 查询语句。SELECT COUNT(*) AS c:计算dede_archives表中的记录数,并将结果命名为c。FROM dede_archives:从文章主表dede_archives中查询(注意:你的表前缀可能是#@_而不是dede_,请根据实际情况修改)。WHERE typeid = ~typeid~:这是关键。~typeid~是 DedeCMS 的一个特殊变量,它会自动被替换为当前栏目的 ID。
[field:c /]:输出查询结果中名为c的字段,也就是我们计算出的文章总数。
页调用当前栏目的文章数量
如果你在文章内容页(article_article.php),想调用这篇文章所属栏目的文章总数,方法稍有不同。
代码示例:
{dede:arclist row='0' typeid='[field:typeid/]'}
本栏目共有文章:[field:total /] 篇
{/dede:arclist}
代码解析:
[field:typeid/]页,这个底层标签可以获取到当前文章所属的栏目 ID。- 我们把这个 ID 明确地赋值给
arclist的typeid属性,然后使用row='0'和[field:total /]来获取数量。
总结与推荐
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
GetArcList |
灵活、性能好、代码相对简洁 | 稍微需要理解 arclist 的工作原理 |
绝大多数情况下的首选,特别是在栏目页和列表页。 |
SQL 查询 |
功能强大,可自定义复杂查询 | 代码稍显复杂,需要了解 SQL 和表结构 | 需要获取除总数外的其他统计信息时。 |
强烈推荐使用方法一 (GetArcList),因为它在易用性、性能和可读性之间取得了最好的平衡。
重要提示:DedeCMS 版本问题
- 旧版 (DedeCMS 5.7 及以前):上述所有方法均适用。
- 新版 (DedeCMS 5.8 及以上,特别是内核版本为
DedeCMS V57+):出于安全考虑,新版本默认对{dede:sql}标签进行了限制,可能无法直接使用~typeid~这样的变量,或者直接禁用了此标签。
如果你使用的是新版 DedeCMS,发现 {dede:sql} 方法不工作,可以尝试以下方法:
检查并开启 SQL 标签权限
登录后台,进入【系统】->【系统基本参数】->【安全设置】,找到“模板引擎禁用标签”,确保里面没有 sql,如果禁用了,就删除它,然后保存。
使用更安全的变量替换
在 {dede:sql} 中,尝试使用 [field:global.autoindex/] 或直接获取栏目ID(如果页面能获取到)。
{dede:sql sql="SELECT COUNT(*) AS c FROM `#@_archives` WHERE typeid = [field:global.autoindex/]"}
[field:c /]
{/dede:sql}
但这不一定总能成功,如果还是不行,GetArcList 方法是你在新版中最可靠的选择。
