修改Discuz积分可以一直为负的问题

版权声明:Discuz插件商店:http://addon.discuz.com/[email protected] https://blog.csdn.net/nciaer_com/article/details/81237316

其实就是如果你现在积分不够,dz还是会扣积分,只不过你的积分就成负的了,并且可以继续扣,其实本身就没啥意思了这样。当然系统操作,一般不会有这样的bug,但是很多插件没有自己判断的话,那就不好说了。其实我们可以自己修改dz源码来实现积分不能为负,直接上代码吧。

找到source\class\table\table_common_member_count.php文件,里面有个increase函数,这个是最底层的修改积分的方法,其实都是一些数据信息的修改,我们常用的updatemembercount函数最后也是调用increase函数。

修改前的函数代码:

public function increase($uids, $creditarr) {
        $uids = dintval((array)$uids, true);
        $sql = array();
        $allowkey = array('extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8',
                        'friends', 'posts', 'threads', 'oltime', 'digestposts', 'doings', 'blogs', 'albums', 'sharings', 'attachsize', 'views',
                        'todayattachs', 'todayattachsize', 'follower', 'following', 'newfollower', 'feeds', 'blacklist');
        foreach($creditarr as $key => $value) {
            if(($value = intval($value)) && $value && in_array($key, $allowkey)) {
                $sql[] = "`$key`=`$key`+'$value'";
            }
        }
        if(!empty($sql)){
            DB::query("UPDATE ".DB::table($this->_table)." SET ".implode(',', $sql)." WHERE uid IN (".dimplode($uids).")", 'UNBUFFERED');
            $this->increase_cache($uids, $creditarr);
        }
    }

修改后的函数代码:

public function increase($uids, $creditarr) {
        $uids = dintval((array)$uids, true);
        $sql = array();
        $allowkey = array('extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8',
                        'friends', 'posts', 'threads', 'oltime', 'digestposts', 'doings', 'blogs', 'albums', 'sharings', 'attachsize', 'views',
                        'todayattachs', 'todayattachsize', 'follower', 'following', 'newfollower', 'feeds', 'blacklist');
        foreach($creditarr as $key => $value) {
            if(($value = intval($value)) && $value && in_array($key, $allowkey)) {
                // 判断是否是积分操作,并且是减积分操作
                if($value < 0 && in_array($key, array('extcredits1', 'extcredits2', 'extcredits3', 'extcredits4', 'extcredits5', 'extcredits6', 'extcredits7', 'extcredits8'))) {
                    foreach($uids as $tmpuid) {
                        $rs = DB::result_first("select {$key} from %t where uid = %d", array('common_member_count', $tmpuid));
                        if(intval($rs) - abs($value) >= 0) { // 如果用户目前的积分减去将要扣的积分>0,则执行,否则不执行
                            $sql[] = "`$key`=`$key`+'$value'";
                        }
                    }
                } else {
                    $sql[] = "`$key`=`$key`+'$value'";
                }
                $sql[] = "`$key`=`$key`+'$value'";
            }
        }
        if(!empty($sql)){
            DB::query("UPDATE ".DB::table($this->_table)." SET ".implode(',', $sql)." WHERE uid IN (".dimplode($uids).")", 'UNBUFFERED');
            $this->increase_cache($uids, $creditarr);
        }
    }

其实就是在用户减积分的时候判断下,如果减积分后值小于0,就不减。

这是客户的一个需求,不是每个站长都会有这样的需求的,记录下来,希望能帮到站长!


硬汉工作室的Discuz应用商店,海量实用小插件:http://addon.discuz.com/[email protected]

猜你喜欢

转载自blog.csdn.net/nciaer_com/article/details/81237316
今日推荐