当前系统行为:积分减少会影响等级
看 user.func.php:437-464 的 user_update_group() 函数:
关键逻辑:
foreach($grouplist as $group) {
if($group['gid'] < 100) continue; // 跳过系统组(***等)
$n = $user['credits'];
if($n >= $group['creditsfrom'] && $n < $group['creditsto']) {
if($user['gid'] != $group['gid']) {
user__update($uid, array('gid' => $group['gid']));
// ...
}
}
}
一般论坛的做法
方案 | 代表 | 特点 |
|---|
积分降级(当前方案) | Discuz! 默认 | 积分减少 → 等级/用户组自动下降,严格对等 |
只升不降 | 多数现代论坛 | 积分减少不影响已达到的等级,等级是"成就"而非"状态" |
延迟降级 | 部分Discuz!配置 | 积分低于阈值后不立即降级,设一个宽限期 |
独立等级 | 贴吧/知乎 | 等级和积分脱钩,等级基于累计获得积分(不减),当前积分仅用于消费 |
主流趋势是「只升不降」或「独立等级」,因为:
用户辛辛苦升级后被扣分导致降级,体验很差
积分是可消费的货币,把它同时当等级依据容易产生矛盾
累计获得积分(不减少)更能反映用户贡献
需要我改成「只升不降」的逻辑吗?大致思路是增加一个 credits_total(累计获得积分)字段,等级依据 credits_total 而非 credits 来计算。