DedeCMS 的统计功能非常强大,通过其内置的标签,可以轻松地在网站前台显示各种数据统计信息,这些标签的核心是 {dede:arclist}、{dede:sql} 等底层标签,或者直接使用系统提供的专用统计标签。

(图片来源网络,侵删)
下面我将分类介绍这些标签,并提供最常用和最实用的代码示例。
核心专用统计标签
DedeCMS 提供了一些非常方便的专用标签,用于直接调用预设好的统计数据。
网站基本信息标签
这些标签用于调用网站后台设置的全局信息。
-
网站名称:
(图片来源网络,侵删){dede:global.cfg_webname/} -
网站首页链接:
{dede:global.cfg_indexurl/} -
网站描述:
{dede:global.cfg_description/} -
网站版权信息:
{dede:global.cfg_powerby/}
文章/信息统计标签
这是最常用的统计类别,通常在网站底部显示。
-
文章总数:
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` where channel=1"} 文章总数:[field:c/] {/dede:sql}- 说明:
dede_archives是文章主表。channel=1表示只统计普通文章,如果需要统计所有内容(包括图集、软件等),可以去掉where channel=1条件。AS c是给COUNT(*)结果起一个别名c,方便在{field:c/}中调用。
- 说明:
-
图集总数:
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` where channel=2"} 图集总数:[field:c/] {/dede:sql} -
软件总数:
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` where channel=3"} 软件总数:[field:c/] {/dede:sql} -
评论总数:
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_feedback`"} 评论总数:[field:c/] {/dede:sql} -
会员总数:
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_member`"} 注册会员:[field:c/] {/dede:sql}
使用 {dede:sql} 标签实现高级统计
{dede:sql} 是一个非常灵活的标签,它允许你直接执行 SQL 语句来获取任何你想要的数据,上面大部分例子都使用了它。
统计今日新增文章
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` WHERE FROM_UNIXTIME(pubdate, '%Y-%m-%d') = CURDATE()"}
今日更新:[field:c/] 篇
{/dede:sql}
- 说明:
pubdate是文章发布时间的时间戳字段。FROM_UNIXTIME(pubdate, '%Y-%m-%d')将时间戳格式化为YYYY-MM-DD的日期字符串。CURDATE()是 MySQL 函数,获取当前日期。- 这句 SQL 的意思就是:统计今天发布的文章数量。
统计昨日新增文章
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` WHERE FROM_UNIXTIME(pubdate, '%Y-%m-%d') = DATE_SUB(CURDATE(), INTERVAL 1 DAY)"}
昨日更新:[field:c/] 篇
{/dede:sql}
- 说明:
DATE_SUB(CURDATE(), INTERVAL 1 DAY)获取昨天的日期。
统计本周新增文章
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` WHERE YEARWEEK(FROM_UNIXTIME(pubdate, '%Y-%m-%d')) = YEARWEEK(CURDATE())"}
本周更新:[field:c/] 篇
{/dede:sql}
统计本月新增文章
{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` WHERE FROM_UNIXTIME(pubdate, '%Y-%m') = DATE_FORMAT(CURDATE(), '%Y-%m')"}
本月更新:[field:c/] 篇
{/dede:sql}
使用 {dede:arclist} 标签进行内容统计
虽然 {dede:arclist} 主要用于列表调用,但它也可以通过一些属性来实现简单的统计。
获取指定栏目下的文章总数
{dede:arclist row='0' titlelen='0'}
[field:ID/]
{/dede:arclist}
- 说明:
row='0'表示获取所有符合条件的记录。titlelen='0'表示标题长度为0,即不显示标题。{field:ID/}会循环输出每个文章的ID,你只需要查看页面源代码,计算一下[field:ID/]出现的次数,就是该栏目的文章总数,这是一种比较“笨”但有效的方法。
获取所有栏目的文章总数并循环输出
{dede:channel typeid='0' type='top'}
<a href="[field:typelink/]">[field:typename/]</a> ([field:id runphp='yes'] @me = GetTotalArc(@me);[/field:id])
{/dede:channel}
- 说明:
{dede:channel}调用所有顶级栏目。typeid='0' type='top'表示调用所有顶级栏目。runphp='yes'表示对field:id的值进行PHP处理。@me = GetTotalArc(@me);是核心。@me默认是当前栏目的ID。GetTotalArc()是 DedeCMS 的一个内置函数,用于获取指定ID的栏目下的文章总数,执行后,@me的值就变成了文章总数。- 最终效果就是:栏目名称 (文章总数),技术分享 (15)。
实用场景:网站底部信息栏统计代码
这是一个非常常见的应用场景,将以上代码组合起来,放在 footer.htm 模板文件中。
<div class="footer-info">
<p>
<span>文章总数:<strong>{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives`"}[field:c/]{/dede:sql}</strong> 篇</span>
<span>图集总数:<strong>{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` where channel=2"}[field:c/]{/dede:sql}</strong> 个</span>
<span>会员总数:<strong>{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_member`"}[field:c/]{/dede:sql}</strong> 位</span>
</p>
<p>
<span>今日更新:<strong>{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_archives` WHERE FROM_UNIXTIME(pubdate, '%Y-%m-%d') = CURDATE()"}[field:c/]{/dede:sql}</strong> 篇</span>
<span>评论总数:<strong>{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_feedback`"}[field:c/]{/dede:sql}</strong> 条</span>
<span>总访问量:<strong>{dede:sql sql="SELECT COUNT(*) AS c FROM `dede_homepagecount`"}[field:c/]{/dede:sql}</strong> 次</span>
</p>
<p>
Copyright © 2025 {dede:global.cfg_webname/} All Rights Reserved. | <a href="{dede:global.cfg_copyright/}">{dede:global.cfg_powerby/}</a>
</p>
</div>
注意事项
- 性能考虑:
{dede:sql}标签每次执行都会查询一次数据库,如果你的网站页面很多,并且每个页面都调用多个统计标签,会增加数据库的负担,可能导致网站速度变慢,建议只在首页或少数关键页面使用。 - 缓存: DedeCMS 有自己的缓存机制,当你修改了模板文件后,需要到后台的 “生成” -> “更新主页HTML” 或 “更新缓存” 中更新一下,才能在前台看到效果。
- 表前缀: 你的数据库表前缀可能不是默认的
dede_,如果你的表前缀是cms_,那么代码中的dede_archives就需要改成cms_archives,请根据你的实际情况进行修改。 - 安全性: 使用
{dede:sql}时,确保你的 SQL 语句是安全的,避免 SQL 注入风险,在后台调用时,系统已经做了基本的安全处理,但仍需谨慎。
| 统计目标 | 推荐标签 | 示例代码 |
|---|---|---|
| 网站基本信息 | {dede:global} |
{dede:global.cfg_webname/} |
| 文章总数 | {dede:sql} |
{dede:sql sql="SELECT COUNT(*) AS c FROMdede_archives"}[field:c/]{/dede:sql} |
| 图集/软件总数 | {dede:sql} |
修改 channel 值即可 |
| 评论/会员总数 | {dede:sql} |
修改表名 dede_feedback / dede_member |
| 昨日更新 | {dede:sql} |
使用 CURDATE() 和 DATE_SUB() 函数 |
| 指定栏目文章数 | {dede:channel} + runphp |
[field:id runphp='yes']@me = GetTotalArc(@me);[/field:id] |
| 访问量统计 | {dede:sql} |
SELECT COUNT(*) FROMdede_homepagecount`` |
希望这份详细的指南能帮助你更好地使用 DedeCMS 的统计功能!
