使用自定义SQL标签(最推荐、最灵活)
这是最常用且最推荐的方法,因为它不涉及修改核心文件,升级网站时不会丢失修改,并且非常灵活。

步骤 1:确保数据表有下载次数字段
默认情况下,dede_downloads(或你自定义的下载表)可能没有记录下载次数的字段,你需要先添加一个。
- 登录你的网站数据库管理工具(如phpMyAdmin)。
- 找到你的DedeCMS数据库。
- 找到下载表,通常是
dede_downloads(前缀dede_可能不同,请根据你的实际情况修改)。 - 为该表添加一个新字段,用于存储下载次数,字段名设为
downloadcount,类型为int(10),并勾选“无符号”和“不为空”,默认值设为0。
ALTER TABLE `dede_downloads` ADD `downloadcount` INT(10) UNSIGNED NOT NULL DEFAULT '0';
步骤 2:在下载链接处增加下载次数
当你点击下载链接时,需要将downloadcount字段的值加1,这通常在 download.php 文件中实现。
- 打开
/plus/download.php文件。 - 找到处理下载逻辑的代码段,通常在文件末尾或一个
if条件判断中。 - 在执行下载操作(如
header("Location: $linkurl");)之前,添加以下SQL更新语句。
找到类似这样的代码:
// ... 其他代码 ...
// 更新点击数
$dsql->ExecuteNoneQuery("UPDATE `dede_downloads` SET click=click+1 WHERE id='$id'");
// 跳转到下载地址
header("Location: $linkurl");
exit();
在其基础上,增加更新downloadcount的代码:

// ... 其他代码 ...
// 更新点击数
$dsql->ExecuteNoneQuery("UPDATE `dede_downloads` SET click=click+1, downloadcount=downloadcount+1 WHERE id='$id'");
// 跳转到下载地址
header("Location: $linkurl");
exit();
注意:如果你的下载表不是 dede_downloads,或者主键字段不是 id,请相应修改SQL语句。
步骤 3:在模板中调用下载次数
你可以在任意模板文件中使用自定义SQL标签来调用并显示下载次数。
假设你的下载列表使用的是 {dede:arclist} 标签,并且它的底层模板是 list_downloads.htm。
在 list_downloads.htm 模板文件中,找到显示下载链接的地方,修改如下:

原始代码可能长这样:
<a href="[field:link/]" target="_blank">点击下载</a>
修改为,加入下载次数显示:
<a href="[field:link/]" target="_blank">点击下载</a> (下载次数: <span class="download-count">[field:id function="GetDownloadCount(@me)"/]</span>)
这里的 [field:id function="GetDownloadCount(@me)"/] 是关键,它调用了自定义的函数 GetDownloadCount,并把当前文章的 id 传递进去。
步骤 4:在 /include/extend.func.php 中添加自定义函数
这个文件是专门用来存放自定义函数的,修改它不会影响核心文件。
打开 /include/extend.func.php 文件,在文件末尾添加以下PHP函数:
/**
* 获取指定下载ID的下载次数
* @param int $id 下载资源的ID
* @return int 下载次数
*/
function GetDownloadCount($id)
{
global $dsql;
$row = $dsql->GetOne("SELECT downloadcount FROM dede_downloads WHERE id = '{$id}'");
// 如果查询到结果,返回downloadcount,否则返回0
return isset($row['downloadcount']) ? $row['downloadcount'] : 0;
}
注意:同样,请确保SQL表名 dede_downloads 和字段名 downloadcount 与你数据库中的实际名称一致。
完成以上步骤后,刷新你的下载列表页面,就能看到每个下载项旁边都显示了它的下载次数。
使用 channel 标签的底层字段(适用于特定场景)
如果你的下载频道是作为一个独立栏目(频道模型)建立的,你可以尝试使用 {dede:channel} 标签的底层字段。
在下载频道的列表模板(通常是 list_article.htm 或你自定义的模板)中,可以尝试这样调用:
{dede:channel type='self'}
<a href="[field:typelink/]">[field:typename/]</a>
下载次数: [field:click/]
{/dede:channel}
说明:
- 这个方法利用了DedeCMS自带的
click字段,它通常记录的是点击次数,不一定是“下载”次数。 - 这种方法非常局限,它只能显示频道的点击次数,而不是每个下载文件的下载次数。
- 如果你的下载模型是“普通文章”类型,这个方法基本无效。
方法一是解决此问题的通用且正确的方案。
总结与建议
| 方法 | 优点 | 缺点 | 推荐度 |
|---|---|---|---|
| 自定义SQL标签 | 灵活、强大、可扩展性好,不修改核心文件,升级无忧。 | 需要手动修改数据库和PHP文件,对新手有一定门槛。 | ★★★★★ (最推荐) |
| channel标签 | 简单,无需额外代码。 | 功能极其有限,通常无法获取单个文件的下载次数,不准确。 | ★☆☆☆☆ (不推荐) |
最终建议:
强烈建议您使用 方法一,虽然初期需要做一些设置,但它为你提供了最准确、最灵活的解决方案,并且是DedeCMS二次开发的最佳实践,一旦设置完成,你就可以在网站的任何地方轻松调用下载次数,甚至可以将其用于排序(按下载次数排序”)。
