附件售卖或下载扣除积分的限制问题
现状:交易积分设置为金钱,附件下载扣除1金钱,暂时未设置附件和主题售卖。想法:最近想弄一个积分商城,目的为了增加社区的活跃性,鼓励大家赚金钱积分,用金钱积分兑换实物奖品。
遇到的问题:
有两类附件上传
1.有人发布提问帖,会把问题资料以附件方式发送出来,回复的人需要下载附件查看,然后再回复
但设置了附件下载需要扣除金钱积分,导致无人愿意下载回复。这类希望附件下载是不扣金钱积分的。
(帮人回复解决问题,还倒扣了金钱积分,这个就比较矛盾了)
2.经验分享帖,会分享一些有价值的资料,好东西分享出来,当然希望能赚取一些金钱积分,这类需要扣除金钱再下载。这个设置是合理,同时增加金钱积分的消耗,增加活跃度。
考虑取消下载扣除积分,改为附件售卖的方式,这样就可以解决上面两类下载扣分问题。
但如果下载的人很多,售卖的方式,很可能会导致金钱积分暴涨。毕竟实物兑换算作成本的。不希望金钱积分暴涨。
有没有限制附件售卖的方式,比如售卖附件单次下载2金钱,最多20金钱,赚取20金钱后,后面下载的不会增加楼主的金钱积分。这样可以避免金钱积分暴涨的问题。
要实现你描述的功能,可以通过自定义开发来实现。以下是一个可能的解决方案:
### 1. 自定义附件售卖逻辑
你可以通过修改Discuz的附件售卖逻辑来实现限制售卖金额的功能。具体步骤如下:
#### 1.1 修改附件售卖逻辑
在Discuz中,附件售卖的逻辑主要位于 `source/module/forum/forum_attachment.php` 文件中。你可以在这个文件中找到相关的代码,并进行修改。
#### 1.2 添加售卖金额限制
你可以在附件售卖的代码中添加一个逻辑,限制每个附件的售卖金额。例如,当附件售卖的金额达到20金钱时,后续下载不再增加楼主的金钱积分。
// 假设 $attach['price'] 是附件的售价
// $attach['downloads'] 是附件的下载次数
// $max_earnings 是最大收益,设置为20金钱
$max_earnings = 20;
$current_earnings = $attach['price'] * $attach['downloads'];
if ($current_earnings < $max_earnings) {
// 正常扣除积分并增加楼主的金钱积分
// 这里是你原有的扣除积分和增加楼主积分的逻辑
} else {
// 超过最大收益后,只扣除下载者的积分,不增加楼主的金钱积分
// 这里是你原有的扣除积分逻辑,但不增加楼主积分
}
#### 1.3 修改数据库结构
你可能需要在数据库中为附件表添加一个字段,用于记录每个附件的当前收益。例如,可以在 `pre_forum_attachment` 表中添加一个 `current_earnings` 字段。
ALTER TABLE pre_forum_attachment ADD COLUMN current_earnings INT(10) UNSIGNED NOT NULL DEFAULT '0';
然后在每次下载附件时更新这个字段。
### 2. 区分不同类型的附件
为了区分提问帖和经验分享帖的附件,你可以在发布附件时添加一个选项,让用户选择附件的类型(例如:免费下载或付费下载)。
#### 2.1 添加附件类型选项
你可以在发布附件的表单中添加一个下拉菜单,让用户选择附件的类型。
<select name="attach_type">
<option value="free">免费下载</option>
<option value="paid">付费下载</option>
</select>
#### 2.2 根据附件类型处理下载逻辑
在下载附件时,根据附件的类型来决定是否扣除积分。
if ($attach['attach_type'] == 'free') {
// 免费下载,不扣除积分
} else {
// 付费下载,扣除积分
}
### 3. 其他注意事项
- **缓存问题**:修改代码后,记得清除缓存,确保修改生效。
- **测试**:在生产环境应用之前,建议在测试环境中充分测试,确保功能正常。
- **备份**:在进行任何代码修改之前,务必备份数据库和代码,以防出现问题。
通过以上方法,你可以实现限制附件售卖金额的功能,同时区分不同类型的附件下载逻辑,从而解决你遇到的问题。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]