Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[分享] Discuz!X 中积分操作函数以及自定义积分

[复制链接]
潇湘双雁 发表于 2015-3-3 15:42:04 | 显示全部楼层 |阅读模式
本帖最后由 潇湘双雁 于 2015-3-3 15:48 编辑

添加一条SQL,此 SQL 记录可以在您插件安装的时候内置在里面
  1. INSERT INTO `pre_common_credit_rule` (`rulename`, `action`, `cycletype`, `cycletime`, `rewardnum`, `norepeat`, `extcredits1`, `extcredits2`, `extcredits3`, `extcredits4`, `extcredits5`, `extcredits6`, `extcredits7`, `extcredits8`, `fids`) VALUES
  2. (‘宠物购买’, ‘petbuy’, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ‘0′);
复制代码

添加后站长便可以在积分策略中看到这条记录
此时可让站长自行调整此策略
在代码中进行积分操作时,您只需在插件中添加以下代码,即可执行此积分策略
  1.         updatecreditbyaction(‘petbuy’, $_G['uid']);
复制代码

单独增减积分可用 updatemembercount() 函数
  1. /**
  2. * 添加积分
  3. * @param Integer $uids: 用户uid或者uid数组
  4. * @param String $dataarr: member count相关操作数组,例: array(‘extcredits1′ => 1)
  5. * @param Boolean $checkgroup: 是否检查用户组 true or false
  6. * @param String $operation: 积分记录操作类型(不记录积分日志可忽略)
  7. * @param Integer $relatedid: 积分记录相关 ID(不记录积分日志可忽略)
  8. * @param String $ruletxt: 动画效果中的积分规则文本(UTF-8格式)
  9. */
  10. function updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = ”, $relatedid = 0, $ruletxt = ”)
复制代码

积分操作类型:
操作名字关联ID说明
ACCforum_activity.tid参与活动扣除积分
AFDcommon_member.uid购买积分即积分充值
AGCcommon_magic.mid获得红包
BACforum_attachment.aid购买附件支出积分
BGCcommon_magic.mid埋下红包
BMCcommon_magic.mid道具购买消耗积分
BTCforum_thread.tid购买主题支出积分
CDC1卡密充值
CECcommon_member.uid积分兑换
ECUcommon_member.uid通过ucenter兑换积分
MRCcommon_magic.mid道具随机获取积分
PRCforum_post.pid帖子被评分所得积分
RACforum_thread.tid最佳答案获取悬赏积分
RCAforum_thread.tid回帖中奖
RCBforum_thread.tid返还回帖奖励积分
RCTforum_thread.tid回帖奖励积分
RCVcommon_member.uid积分转账接收
RGCcommon_magic.mid回收红包
RKCcommon_member.uid竞价排名
RPCcommon_report.id举报功能中的奖惩
RSCforum_thread.tid评分帖子扣除自己的积分
RTCforum_thread.tid发表悬赏主题扣除积分
SACforum_attachment.aid出售附件获得积分
STCforum_thread.tid出售主题获得积分
TFRcommon_member.uid积分转账转出
TRCcommon_task.taskid任务奖励积分
UGPcommon_usergroup.groupid购买扩展用户组支出积分


  1. function updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = '', $relatedid = 0, $ruletxt = '') {
  2. if(!empty($uids) && (is_array($dataarr) && $dataarr)) {
  3. require_once libfile('function/credit');
  4. return _updatemembercount($uids, $dataarr, $checkgroup, $operation, $relatedid, $ruletxt);
  5. }
  6. return true;
  7. }
复制代码

里面调用了另一个函数,原始的定义我也发过来吧:
  1. function _updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = '', $relatedid = 0, $ruletxt = '') {
  2. if(empty($uids)) return;
  3. if(!is_array($dataarr) || empty($dataarr)) return;
  4. if($operation && $relatedid) {
  5. $writelog = true;
  6. $log = array(
  7. 'uid' => $uids,
  8. 'operation' => $operation,
  9. 'relatedid' => $relatedid,
  10. 'dateline' => time(),
  11. );
  12. } else {
  13. $writelog = false;
  14. }
  15. $data = array();
  16. foreach($dataarr as $key => $val) {
  17. if(empty($val)) continue;
  18. $val = intval($val);
  19. $id = intval($key);
  20. $id = !$id && substr($key, 0, -1) == 'extcredits' ? intval(substr($key, -1, 1)) : $id;
  21. if(0 < $id && $id < 9) { $data['extcredits'.$id] = $val; if($writelog) { $log['extcredits'.$id] = $val; } } else { $data[$key] = $val; } } if($writelog) { DB::insert('common_credit_log', $log); } if($data) { include_once libfile('class/credit'); $credit = & credit::instance(); $credit->updatemembercount($data, $uids, $checkgroup, $ruletxt);
  22. }
  23. }
复制代码

其中第四个参数和第五个参数在写积分记录的时候有用,如果两者皆不为空,则系统会在积分记录中记录。
第四个参数是记录相关操作的变量,第五个参数看名称应该是记录产生这个积分操作的相关的id值(例如像uid,fid,tid这类的),第六个参数用于当$data数组(即记录积分增减情况的数组)不为空时,重新调用函数并把值传递给第四个变量。
                                                       

评分

1

查看全部评分

monkeye 发表于 2015-3-3 15:44:18 | 显示全部楼层
代码格式能调好点么
回复

使用道具 举报

 楼主| 潇湘双雁 发表于 2015-3-3 15:44:51 | 显示全部楼层
恩。正在调
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 06:48 , Processed in 0.027464 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表