野生大熊猫

解决discuz开发过程中直接修改pre_common_member_count中金币的值不生效问题。
序今天在用DS文库的时候,发现一个问题,就是当用户购买了文库后,去查看金币没有扣除,于是我用小号反复测试了几遍。发...
扫描右侧二维码阅读全文
05
2018/04

解决discuz开发过程中直接修改pre_common_member_count中金币的值不生效问题。

今天在用DS文库的时候,发现一个问题,就是当用户购买了文库后,去查看金币没有扣除,于是我用小号反复测试了几遍。发现购买文档后,金币不改变。但是继续购买,发现已经无法购买,提示金币不足。

一、数据库

我第一时间想到去看数据库,发现pre_common_member_countextcredits1金币已经没有了。

二、代码

返回过去查看该插件代码,发现所用的代码是直接更新数据库pre_common_member_count,按道理来说是没有任何问题的。那到底问题出在哪?

QQ图片20180405003153.png

三、缓存

马上想到了缓存,于是进入后台->工具->更新缓存,更新缓存后,进入前台页面查看积分,发现依然没有变化。

普通缓存按道理这样就可以清除掉啊?为啥这里没有反应

突然想起来之前配置了memcache,于是点击清除。进入前端查看,金币果然发生了变化。

QQ图片20180405003428.png

四、updatemembercount函数

/** 
* 添加积分 
* @param Integer $uids: 用户uid或者uid数组 
* @param String $dataarr: 积分操作数组 
* @param Boolean $checkgroup: 是否检查用户组 true or false 
* @param String $operation: 操作类型 
* @param Integer $relatedid: 
* @param String $ruletxt: 积分规则文本 
* @param String $customtitle: 自定义积分记录标题 
* @param String $custommemo: 自定义积分记录说明 
*/  
  
  
function updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = '', $relatedid = 0, $ruletxt = '', $customtitle = '', $custommemo = '') {  
    if(!empty($uids) && (is_array($dataarr) && $dataarr)) {  
        require_once libfile('function/credit');  
        return _updatemembercount($uids, $dataarr, $checkgroup, $operation, $relatedid, $ruletxt, $customtitle, $custommemo);  
    }  
    return true;  
}  

推荐使用这个函数

updatemembercount($_G['uid'], array(1=>10),true,'',123,'提示显示','积分变更标题','积分变更详情');  

PS:也可以C::memory()->clear();来更新memcache之类的缓存

Last modification:August 11th, 2018 at 03:43 pm
If you think my article is useful to you, please feel free to appreciate

4 comments

  1. 直流水泵

    dz作为社区的老大,还是很好的。

    1. 野生大熊猫
      @直流水泵

      不过现在好多都往移动端发展了,并且很多求快

  2. RAKsmart VPS

    感谢分享

    1. 野生大熊猫

Leave a Comment