最核心的修改点在于,我们需要找到处理下载次数的代码,并让特定类型的文件或特定目录下的文件跳过这个计数逻辑。

这里为您提供两种最常用和最有效的方法:
修改核心 PHP 文件(最直接、最彻底)
这种方法直接修改 DedeCMS 处理下载的底层代码,实现一劳永逸的效果。
第一步:定位核心文件
下载次数的增加逻辑主要在 include/dedecollection.class.php 文件中,这个文件是 DedeCMS 的“我的收藏夹”功能类,但它也负责处理附件的点击(下载)次数。
第二步:修改代码
-
用 FTP 或文件管理器登录您的网站,找到并打开文件:
/include/dedecollection.class.php
(图片来源网络,侵删) -
在文件中找到
Click()函数,这个函数就是每次下载时被调用来增加点击次数的地方。 -
修改前的代码(示例,具体行数可能因版本而异):
function Click($aid) { $this->dsql->ExecuteNoneQuery("UPDATE `#@__downloads` SET clicks=clicks+1 WHERE id='$aid'; "); return true; } -
修改后的代码(增加判断条件): 我们可以在
Click()函数的开头加入一个判断,如果文件路径满足某个条件,就直接return,不执行后面的 SQL 更新语句。function Click($aid) { // --- 新增的判断逻辑开始 --- // 先获取附件信息 $row = $this->dsql->GetOne("SELECT url FROM `#@__downloads` WHERE id='$aid'; "); if ($row) { // 判断文件路径是否包含特定关键词 // 路径中包含 'no_count' 或 'temp' 或 'statics' 的文件不计数 if (strpos($row['url'], 'no_count') !== false || strpos($row['url'], 'temp') !== false) { // 满足条件,不增加点击次数,直接返回 return true; } } // --- 新增的判断逻辑结束 --- // 原有的增加点击次数的逻辑 $this->dsql->ExecuteNoneQuery("UPDATE `#@__downloads` SET clicks=clicks+1 WHERE id='$aid'; "); return true; }
代码解释:

if ($row): 先查询出这个附件的url路径。strpos($row['url'], 'no_count') !== false: 使用strpos函数检查文件路径中是否包含我们设定的关键词,'no_count',如果包含,strpos会返回该关键词的位置(一个数字),不包含则返回false。return true;: 如果路径中包含了关键词,就立即结束函数,不再执行下面的UPDATE语句,从而实现了“不增加下载次数”的效果。
第三步:应用修改
- 保存并上传修改后的
dedecollection.class.php文件。 - 上传一个新文件到您的网站,上传到
/uploads/no_count/目录下。 - 在 DedeCMS 后台,将这个文件添加到“文档附件”中。
- 访问该文件的下载链接,然后回到后台查看“文件管理器”,你会发现该附件的点击次数没有增加。
优点:
- 一劳永逸,所有符合条件的文件都会自动生效。
- 逻辑清晰,直接作用于核心功能。
缺点:
- 需要修改核心文件,升级 DedeCMS 时可能会被覆盖,需要重新修改。
使用 JavaScript 前端跳转(更灵活,适合特定场景)
这种方法不修改 PHP 代码,而是通过在前端页面添加一段 JavaScript 代码,让特定链接直接指向文件的真实地址,从而绕过 DedeCMS 的下载处理页面。
适用场景:
- 你只想让某个或某几个特定链接不计数。
- 你不想修改网站的核心文件。
操作步骤:
-
找到下载链接的生成代码: 在 DedeCMS 的模板文件(通常是
article_article.htm)中,找到生成下载链接的代码,它通常是这样的:<a href="{dede:field name='arcurl'/}?downid={dede:field name='id'/}" target="_blank">下载附件</a>或者使用
{dede:field name='softlink'/} -
修改模板文件,添加 JS 跳转: 我们给这个链接添加一个
onclick事件,当点击时,用 JavaScript 直接跳转到附件的真实地址。<!-- 原始链接 --> <!-- <a href="{dede:field name='arcurl'/}?downid={dede:field name='id'/}" target="_blank">下载附件</a> --> <!-- 修改后的链接,假设附件的真实地址存储在[field:softurl/]中 --> <a href="javascript:;" onclick="window.open('{dede:field name='softurl'/}')" target="_blank">下载附件(不计数)</a>注意:
{dede:field name='softurl'/}这个标签通常可以直接获取到附件的原始、未经处理的 URL,请确认在你的模板中这个标签是否能正确输出文件路径。softurl不可用,你可能需要通过自定义字段或其他方式获取到文件的绝对路径。href="javascript:;"是一个空白的链接,防止页面刷新。onclick="window.open(...)"会在新窗口中打开真实的文件地址,完全绕过了 DedeCMS 的download.php处理页面。
优点:
- 无需修改核心文件,升级无忧。
- 灵活性高,可以精确控制哪些链接需要跳过。
缺点:
- 需要手动为每个需要“不计数”的链接修改模板。
- 如果附件路径发生变动,需要手动更新模板。
总结与建议
| 方法 | 优点 | 缺点 | 推荐场景 |
|---|---|---|---|
| 修改 PHP | 一劳永逸,全自动,符合所有场景 | 修改核心文件,升级可能覆盖 | 需要批量处理,或创建一个专门的“免计数”资源库。 |
| JS 跳转 | 安全灵活,不修改核心文件 | 需手动修改模板,不够自动化 | 只需偶尔为个别文件设置,或不想动核心代码时。 |
对于绝大多数用户,方法一(修改 dedecollection.class.php) 是最推荐、最规范的解决方案,你可以设定一个特殊的目录(如 uploads/no_count/),所有上传到这个目录的文件,在添加为附件后,下载都不会增加次数,非常方便。
