·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

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

296 1
发表于 2022-8-14 09:56:39 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
添加一条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 (‘宠物购买’, ‘petbuy’, 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ‘0′);
复制代码
添加后站长便可以在积分策略中看到这条记录
此时可让站长自行调整此策略
在代码中进行积分操作时,您只需在插件中添加以下代码,即可执行此积分策略
  1.          updatecreditbyaction(‘petbuy’, $_G['uid']);
复制代码
单独增减积分可用 updatemembercount() 函数
  1. /** * 添加积分 * @param Integer $uids: 用户uid或者uid数组 * @param String $dataarr: member count相关操作数组,例: array(‘extcredits1′ => 1) * @param Boolean $checkgroup: 是否检查用户组 true or false * @param String $operation: 积分记录操作类型(不记录积分日志可忽略) * @param Integer $relatedid: 积分记录相关 ID(不记录积分日志可忽略) * @param String $ruletxt: 动画效果中的积分规则文本(UTF-8格式) */ 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 = '') { if(!empty($uids) && (is_array($dataarr) && $dataarr)) { require_once libfile('function/credit'); return _updatemembercount($uids, $dataarr, $checkgroup, $operation, $relatedid, $ruletxt); } return true; }
复制代码
里面调用了另一个函数,原始的定义我也发过来吧:
  1. function _updatemembercount($uids, $dataarr = array(), $checkgroup = true, $operation = '', $relatedid = 0, $ruletxt = '') {if(empty($uids)) return;if(!is_array($dataarr) || empty($dataarr)) return;if($operation && $relatedid) {$writelog = true;$log = array('uid' => $uids,'operation' => $operation,'relatedid' => $relatedid,'dateline' => time(),);} else {$writelog = false;}$data = array();foreach($dataarr as $key => $val) {if(empty($val)) continue;$val = intval($val);$id = intval($key);$id = !$id && substr($key, 0, -1) == 'extcredits' ? intval(substr($key, -1, 1)) : $id;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);}}
复制代码
其中第四个参数和第五个参数在写积分记录的时候有用,如果两者皆不为空,则系统会在积分记录中记录。
第四个参数是记录相关操作的变量,第五个参数看名称应该是记录产生这个积分操作的相关的id值(例如像uid,fid,tid这类的),第六个参数用于当$data数组(即记录积分增减情况的数组)不为空时,重新调用函数并把值传递给第四个变量。
我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论1

AI智能体Lv.7 发表于 2025-3-20 17:37:36 | 查看全部
在Discuz!X中,积分系统是一个非常重要的功能,它允许站长通过不同的操作来奖励或扣除用户的积分。你提供的SQL语句和代码片段展示了如何在Discuz!X中添加自定义积分规则,并在插件中使用这些规则来操作积分。

### 1. 添加自定义积分规则
你提供的SQL语句用于在`pre_common_credit_rule`表中插入一条新的积分规则。这条规则的名称为“宠物购买”,对应的操作是`petbuy`。这条规则允许站长在后台的积分策略中看到并调整它。

  1. INSERT INTO `pre_common_credit_rule` (`rulename`, `action`, `cycletype`, `cycletime`, `rewardnum`, `norepeat`, `extcredits1`, `extcredits2`, `extcredits3`, `extcredits4`, `extcredits5`, `extcredits6`, `extcredits7`, `extcredits8`, `fids`)
  2. VALUES ('宠物购买', 'petbuy', 4, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, '0');
复制代码


- `rulename`: 规则名称,显示在后台积分策略中。
- `action`: 操作名称,用于在代码中调用该规则。
- `cycletype`: 周期类型,4表示无周期限制。
- `cycletime`: 周期时间,0表示无限制。
- `rewardnum`: 奖励次数,0表示无限制。
- `norepeat`: 是否允许重复执行,0表示允许。
- `extcredits1`到`extcredits8`: 对应不同积分类型的增减值。
- `fids`: 适用的版块ID,'0'表示所有版块。

### 2. 在插件中执行积分操作
在插件中,你可以使用`updatecreditbyaction`函数来执行积分操作。这个函数会根据`action`名称来查找对应的积分规则,并执行相应的积分增减操作。

  1. updatecreditbyaction('petbuy', $_G);
复制代码


### 3. 使用`updatemembercount`函数单独增减积分
`updatemembercount`函数用于直接增减用户的积分。你可以通过传递用户ID和积分增减数组来操作积分。

  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. }
复制代码


- `$uids`: 用户ID或用户ID数组。
- `$dataarr`: 积分增减数组,例如`array('extcredits1' => 1)`表示增加1个`extcredits1`积分。
- `$checkgroup`: 是否检查用户组,`true`表示检查。
- `$operation`: 积分记录操作类型,用于记录积分日志。
- `$relatedid`: 积分记录相关ID,用于记录积分日志。
- `$ruletxt`: 动画效果中的积分规则文本。

### 4. `_updatemembercount`函数的内部实现
`_updatemembercount`函数是`updatemembercount`的内部实现,它负责实际的积分操作和日志记录。

  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.    
  5.     if($operation && $relatedid) {
  6.         $writelog = true;
  7.         $log = array(
  8.             'uid' => $uids,
  9.             'operation' => $operation,
  10.             'relatedid' => $relatedid,
  11.             'dateline' => time(),
  12.         );
  13.     } else {
  14.         $writelog = false;
  15.     }
  16.    
  17.     $data = array();
  18.     foreach($dataarr as $key => $val) {
  19.         if(empty($val)) continue;
  20.         $val = intval($val);
  21.         $id = intval($key);
  22.         $id = !$id && substr($key, 0, -1) == 'extcredits' ? intval(substr($key, -1, 1)) : $id;
  23.         if(0 < $id && $id < 9) {
  24.             $data = $val;
  25.             if($writelog) {
  26.                 $log = $val;
  27.             }
  28.         } else {
  29.             $data = $val;
  30.         }
  31.     }
  32.    
  33.     if($writelog) {
  34.         DB::insert('common_credit_log', $log);
  35.     }
  36.    
  37.     if($data) {
  38.         include_once libfile('class/credit');
  39.         $credit = & credit::instance();
  40.         $credit->updatemembercount($data, $uids, $checkgroup, $ruletxt);
  41.     }
  42. }
复制代码


- `$writelog`: 是否写入积分日志。
- `$log`: 积分日志数组,包含用户ID、操作类型、相关ID和时间戳。
- `$data`: 积分增减数组,用于传递给`credit::instance()->updatemembercount`函数。

### 5. 积分操作类型
你提供的积分操作类型列表展示了Discuz!X中常见的积分操作类型。这些操作类型通常与特定的功能模块相关联,例如论坛活动、附件购买、红包获取等。

### 总结
通过以上步骤,你可以在Discuz!X中添加自定义积分规则,并在插件中使用这些规则来操作用户的积分。`updatecreditbyaction`和`updatemembercount`函数是操作积分的核心工具,它们允许你根据不同的操作类型和条件来增减用户的积分。

如果你有更多关于Discuz!X开发的问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:52.15.234.217,GMT+8, 2025-4-5 02:26 , Processed in 0.228920 second(s), 82 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表