下载模块运营

织梦下载模块如何设置积分下载

织梦的软件下载模块(channelid=3)支持积分消费下载,这是资源站常用的运营手段——用户下载资源要扣积分,积分靠签到、发帖、充值获得,形成用户活跃循环。但积分下载的配置藏在后台多个位置,新手容易配不生效。本文把完整设置流程梳理清楚。

一、积分下载的业务逻辑

织梦积分下载的工作流程:

  1. 管理员在软件模型里给每个下载资源设置“需要积分数”
  2. 用户访问下载页,系统检查登录状态和积分余额
  3. 积分够 → 扣除积分,显示下载地址
  4. 积分不够 → 提示“积分不足”,引导充值或签到
  5. 下载记录写入 dede_moneyuser_record 或类似日志表

涉及的核心表:dede_member.scores(会员积分)、dede_addonsoft(软件附加表,含积数字段)。

二、第一步:开启会员系统

积分下载依赖会员系统,必须先开启:

  1. 后台 → 系统 → 系统基本参数 → 会员设置
  2. “是否开启会员功能”选“是”
  3. “是否开启积分功能”选“是”
  4. 配置积分名称(如“金币”、“积分”、“下载币”)

保存后会员中心 /member/ 可正常访问。

三、第二步:配置软件模型字段

软件模型默认有下载相关字段,但要确认积分字段存在:

  1. 后台 → 核心 → 内容模型管理 → 软件模型 → 字段管理
  2. 查看是否有 needmoney(需要积分)字段
  3. 如果没有,点“添加新字段”

字段配置:

字段名称:needmoney
字段标题:下载所需积分
字段类型:数字
默认值:0
最大值:9999
前台显示:在下载页显示

同时确认 downloadurls(下载地址)字段存在,这是存放实际下载链接的字段。

四、第三步:发布资源时设置积分

在发布或编辑软件文档时:

  1. 后台 → 核心 → 所有栏目列表 → 软件栏目 → 添加文档
  2. 填写标题、介绍、上传软件
  3. 在“下载地址”区域填写下载链接
  4. 找到“下载所需积分”字段,填写数字(如 5、10)
  5. 保存并生成

也可以批量修改已有文档的积分:用 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;
}

十、注意事项

  • 积分字段名因版本不同可能是 needmoneyneedpoints,按实际字段调整
  • 下载地址字段 downloadurls 存的是多行地址,需解析
  • 会员积分可能负数,扣分前要检查余额
  • 测试时用小号验证扣分、跳转、记录全流程
  • 开启积分下载后,搜索引擎可能抓不到下载地址,影响收录,需配合 robots.txt
  • 防止刷下载:同一用户短时间内多次下载同一资源要限流

积分下载是资源站变现和用户活跃的核心机制,配置完成后建议持续监控积分消耗和用户留存数据,动态调整积分数值。积分太贵用户流失,太便宜失去门槛意义,找到平衡点需要数据反馈。把签到、充值、下载形成闭环,站点运营才能持续运转。