附件下载记录,有些用户组下载附件不扣积分,但是下载.....
附件下载记录,有些用户组下载附件不扣积分,但是下载怎么也把记录到里面。类型图中框架的
怎么修改 在Discuz!中,附件下载记录的功能通常是通过插件或自定义代码实现的。如果你希望某些用户组在下载附件时不扣积分,但仍然记录下载行为,可以通过以下步骤进行修改:
### 1. 修改下载逻辑
首先,你需要找到处理附件下载的代码部分。通常,这部分代码位于 `source/module/forum/forum_attachment.php` 文件中。
#### 1.1 找到下载扣积分的逻辑
在 `forum_attachment.php` 文件中,找到处理附件下载扣积分的代码部分。通常,这部分代码会检查用户组权限,并根据用户组决定是否扣积分。
if ($_G['group']['allowdownload'] && !$attach['isimage']) {
// 扣积分的逻辑
if (!in_array($_G['groupid'], array(1, 2, 3))) { // 假设1,2,3是不扣积分的用户组
// 扣积分操作
updatecreditbyaction('download', $_G['uid'], array(), $attach['aid']);
}
}
#### 1.2 修改代码
你可以修改上述代码,使得某些用户组在下载附件时不扣积分,但仍然记录下载行为。例如:
if ($_G['group']['allowdownload'] && !$attach['isimage']) {
// 记录下载行为
C::t('forum_attachment_downloadlog')->insert(array(
'uid' => $_G['uid'],
'aid' => $attach['aid'],
'dateline' => TIMESTAMP,
));
// 扣积分的逻辑
if (!in_array($_G['groupid'], array(1, 2, 3))) { // 假设1,2,3是不扣积分的用户组
// 扣积分操作
updatecreditbyaction('download', $_G['uid'], array(), $attach['aid']);
}
}
### 2. 修改下载记录逻辑
如果你希望某些用户组的下载行为不被记录,可以在记录下载行为的代码中添加条件判断。
if ($_G['group']['allowdownload'] && !$attach['isimage']) {
// 记录下载行为
if (!in_array($_G['groupid'], array(4, 5, 6))) { // 假设4,5,6是不记录下载行为的用户组
C::t('forum_attachment_downloadlog')->insert(array(
'uid' => $_G['uid'],
'aid' => $attach['aid'],
'dateline' => TIMESTAMP,
));
}
// 扣积分的逻辑
if (!in_array($_G['groupid'], array(1, 2, 3))) { // 假设1,2,3是不扣积分的用户组
// 扣积分操作
updatecreditbyaction('download', $_G['uid'], array(), $attach['aid']);
}
}
### 3. 测试修改
完成上述修改后,建议你在测试环境中进行测试,确保修改后的代码能够正常工作,并且不会影响其他功能。
### 4. 部署到生产环境
测试通过后,将修改后的代码部署到生产环境中。
### 5. 注意事项
- 在修改代码之前,建议备份相关文件,以防修改出错导致系统无法正常运行。
- 如果你对代码不熟悉,建议在开发环境中进行测试,或者寻求专业开发人员的帮助。
通过以上步骤,你可以实现某些用户组在下载附件时不扣积分,但仍然记录下载行为的功能。如果你有更多问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 关于Discuz附件下载记录的修改方案,需要从用户组权限、积分逻辑及下载触发机制三个方面进行调整。以下是具体实现步骤:
1. 用户组权限二次校验
在`source/module/forum/forum_attachment.php`中找到扣积分逻辑区块(约第320行),增加组权限判断:
// 原扣积分代码
if($attach['price'] > 0 && !$ispaid) {
// 扣分逻辑
}
// 修改后增加:
$groupid = $_G['groupid']; // 获取当前用户组
$no_record_groups = array(4, 5); // 不记录的用户组ID数组
if(!in_array($groupid, $no_record_groups)) {
// 记录下载日志
C::t('forum_attachmentlog')->insert(array(
'tid' => $attach['tid'],
'pid' => $attach['pid'],
'uid' => $_G['uid'],
'dateline' => TIMESTAMP
));
}
2. 积分扣除与记录解耦处理
在`source/function/function_forum.php`中定位`updatecredits`函数,增加前置判断:
function updatecredits($uid, $extcredits, $needcheck = true, $coef = 1, $update = true, $type='') {
global $_G;
// 新增用户组判断
if(in_array($_G['groupid'], array(4,5)) && $type == 'attach') {
return false; // 特定用户组跳过积分操作
}
// 原积分处理逻辑
}
3. 前端下载触发改造
在`template/default/forum/discuzcode.htm`模板中修改下载按钮事件:
<!--{if $_G['group']['allowgetattach']}-->
<a href="forum.php?mod=attachment{$is_archive}&aid=$aidencode"
onclick="return handleDownload({$_G['groupid']}, this)">
下载附件
</a>
<!--{/if}-->
<script>
function handleDownload(groupId, link) {
const noRecordGroups = ;
const url = new URL(link.href);
if(noRecordGroups.includes(groupId)) {
url.searchParams.append('nolog', 1);// 添加禁止记录标记
link.href = url.toString();
}
return true;
}
</script>
4. 后台管理增强(可选)
在`source/admincp/admincp_perm.php`中增加设置项:
// 在用户组编辑页面增加新选项
showsetting('不记录下载行为', 'newsetting', $group['no_attachlog'], 'radio');
// 对应数据库需新增no_attachlog字段
实现效果:
- 指定用户组下载时不会生成下载记录
- 前端请求自动携带禁用标记
- 积分系统与日志系统解耦处理
- 后台可配置化设置(需二次开发)
注意事项:
1. 修改前务必备份原始文件
2. 用户组ID需根据实际设置调整
3. 涉及数据库字段新增时需要执行ALTER语句
4. 缓存更新需在修改后清理data/cache目录
如果需要对日志表进行分区管理,建议在`source/class/table/forum_attachmentlog.php`中增加分区逻辑,可通过`$_G['groupid']`进行日志存储分区。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]