织梦下载模块如何设置积分下载
织梦的软件下载模块(channelid=3)支持积分消费下载,这是资源站常用的运营手段——用户下载资源要扣积分,积分靠签到、发帖、充值获得,形成用户活跃循环。但积分下载的配置藏在后台多个位置,新手容易配不生效。本文把完整设置流程梳理清楚。
一、积分下载的业务逻辑
织梦积分下载的工作流程:
- 管理员在软件模型里给每个下载资源设置“需要积分数”
- 用户访问下载页,系统检查登录状态和积分余额
- 积分够 → 扣除积分,显示下载地址
- 积分不够 → 提示“积分不足”,引导充值或签到
- 下载记录写入
dede_moneyuser_record或类似日志表
涉及的核心表:dede_member.scores(会员积分)、dede_addonsoft(软件附加表,含积数字段)。
二、第一步:开启会员系统
积分下载依赖会员系统,必须先开启:
- 后台 → 系统 → 系统基本参数 → 会员设置
- “是否开启会员功能”选“是”
- “是否开启积分功能”选“是”
- 配置积分名称(如“金币”、“积分”、“下载币”)
保存后会员中心 /member/ 可正常访问。
三、第二步:配置软件模型字段
软件模型默认有下载相关字段,但要确认积分字段存在:
- 后台 → 核心 → 内容模型管理 → 软件模型 → 字段管理
- 查看是否有
needmoney(需要积分)字段 - 如果没有,点“添加新字段”
字段配置:
字段名称:needmoney
字段标题:下载所需积分
字段类型:数字
默认值:0
最大值:9999
前台显示:在下载页显示
同时确认 downloadurls(下载地址)字段存在,这是存放实际下载链接的字段。
四、第三步:发布资源时设置积分
在发布或编辑软件文档时:
- 后台 → 核心 → 所有栏目列表 → 软件栏目 → 添加文档
- 填写标题、介绍、上传软件
- 在“下载地址”区域填写下载链接
- 找到“下载所需积分”字段,填写数字(如 5、10)
- 保存并生成
也可以批量修改已有文档的积分:用 SQL 批量更新:
-- 把某栏目下所有软件积分设为10
UPDATE dede_addonsoft
SET needmoney=10
WHERE typeid IN (SELECT id FROM dede_arctype WHERE topid=5);
五、第四步:配置下载权限
后台 → 系统 → 系统基本参数 → 会员设置里,有几个关键项:
- 下载所需积分 —— 全站默认下载积分(可被文档单独设置覆盖)
- 未登录用户下载 —— 建议设为“禁止”,强制登录才能下载
- 积分扣除方式 —— 每次下载扣 / 首次下载扣(重复下载不扣)
推荐配置:未登录禁止下载 + 每次下载扣积分,这样既保护资源又持续消耗积分。
六、第五步:模板里调用下载按钮
软件内容页模板 /templets/default/article_soft.htm 里,下载按钮区域要配合积分判断:
{dede:field name='needmoney' runphp='yes'}
if(@me > 0){
@me='<div class="download-box">
<p>下载需消耗 <span>'.@me.' 积分</span></p>
<a href="/plus/download.php?aid={dede:field.id/}"
class="btn-download">立即下载</a>
</div>';
} else {
@me='<a href="/plus/download.php?aid={dede:field.id/}"
class="btn-download">免费下载</a>';
}
{/dede:field}
实际下载跳转走 /plus/download.php,这个文件负责积分检查和扣除。
七、第六步:修改 download.php 积分逻辑
下载逻辑核心文件是 /plus/download.php。如果默认逻辑不满足需求,可修改:
// 检查登录
if(!$cfg_ml->IsLogin()){
ShowMsg('请先登录', '/member/login.php');
exit;
}
// 获取文档积分要求
$arcRow=$dsql->GetOne("SELECT * FROM dede_addonsoft WHERE aid='$aid'");
$needmoney=intval($arcRow['needmoney']);
// 检查积分
$userScores=$cfg_ml->M_Scores;
if($userScores < $needmoney){
ShowMsg('积分不足,当前'.$userScores.',需要'.$needmoney, '-1');
exit;
}
// 扣除积分
$dsql->ExecuteNoneQuery(
"UPDATE dede_member SET scores=scores-$needmoney
WHERE mid='".$cfg_ml->M_ID."'"
);
// 记录消费日志
$dsql->ExecuteNoneQuery(
"INSERT INTO dede_moneyuser_record
(mid,aid,money,dtime) VALUES
('".$cfg_ml->M_ID."','$aid','$needmoney','".time()."')"
);
// 跳转到下载地址
header('Location: '.$arcRow['downloadurls']);
exit;
修改核心文件前备份原文件。升级织梦版本时该文件可能被覆盖,建议用钩子或重写方式扩展。
八、会员积分获取途径配置
用户要有途径获取积分才能消费。织梦支持:
- 签到 —— 每日签到送积分,
/member/sign.php - 发帖/评论 —— 发布内容奖励积分
- 注册赠送 —— 新用户注册送初始积分
- 充值 —— 接入支付接口购买积分
- 邀请 —— 邀请好友注册送积分
在后台 → 系统 → 系统基本参数 → 积分设置里配置各项奖励数值。
九、下载记录与防重复消费
用户下载过的资源,再次下载是否扣积分?这影响用户体验。建议:
- 首次下载扣积分,记录到
dede_moneyuser_record - 再次下载时查询记录表,已下载过则不扣分
- 记录保留 30 天,过期后重新扣分(防止积分永久免费)
// 检查是否已下载过
$record=$dsql->GetOne(
"SELECT * FROM dede_moneyuser_record
WHERE mid='".$cfg_ml->M_ID."' AND aid='$aid'
AND dtime>".(time()-30*86400)
);
if($record){
// 已下载过,不扣分直接跳转
header('Location: '.$arcRow['downloadurls']);
exit;
}
十、注意事项
- 积分字段名因版本不同可能是
needmoney或needpoints,按实际字段调整 - 下载地址字段
downloadurls存的是多行地址,需解析 - 会员积分可能负数,扣分前要检查余额
- 测试时用小号验证扣分、跳转、记录全流程
- 开启积分下载后,搜索引擎可能抓不到下载地址,影响收录,需配合 robots.txt
- 防止刷下载:同一用户短时间内多次下载同一资源要限流
积分下载是资源站变现和用户活跃的核心机制,配置完成后建议持续监控积分消耗和用户留存数据,动态调整积分数值。积分太贵用户流失,太便宜失去门槛意义,找到平衡点需要数据反馈。把签到、充值、下载形成闭环,站点运营才能持续运转。