专注于discuz,uchome,dedecms等各类PHP程序仿站(二次开发和模板制作)。

« »
2016-04-01discuz

1,800 阅读

Discuz!X3.2 用户积分系统二次开发简介《转》

Discuz 内置了一套比较完善的用户积分系统。通过积分系统可以将用户的日常行为转化为一些可以量化的指标,一方面提高了用户粘性,另一方面也为运营提供了相应的数据支撑。本文将简要介绍 Discuz 内置的用户积分系统的工作原理。

Discuz!X 3.2 后台全局设置下可以配置站点的积分策略,在积分基本设置中我们可以看到,Discuz 内置了 8 种扩展积分类型,分别是 extcredits1~extcredits8。用户可以自定义属性的名称,比如:经验、金币、体力等等。总积分由管理员设定的公式计算得到,公式中的 变量由以上八种扩展积分和用户行为统计共同决定,具体如何决定取决于公式如何写,比如系统默认的积分计算公式是:

发帖数+精华帖数*5+威望*2+金钱+贡献
posts+digestposts*5+extcredits1*2+extcredits2+extcredits3

用户行为统计支持:发帖数、主题数、精华帖数、在线时间、好友数、记录数、日志数、相册数、分享数等等。

在积分策略设置可以设置用户行为对应的扩展积分奖励,奖励仅限于处于开启状态的扩展积分,默认仅开启了 extcredits1~extcredits3。每个用户行为对应的奖励可以细化到“一次性”、“每天”、“每小时” 或 “间隔多少分钟” 等类型,以及每次奖励的具体数值。

对于二次开发而言,系统后台并没有提供增加用户行为的方法,因此只能通过代码实现。

实例:需要对微信用户分享到朋友圈的行为进行相关的积分奖励。以下是具体实现步骤:

1、创建一条积分策略规则。

  1. C::t(“common_credit_rule”)->insert(array(
  2.         ’rulename’ => ‘分享到朋友圈’,
  3.         ’action’ => ‘wxsharetimeline’,
  4. ));

复制代码

代码解释:
common_credit_rule 是积分策略规则表
rulename 是此条积分规则的名称
action 是系统用于识别此条规则的唯一ID


当然也可以通过 phpmyadmin 这类数据库 Web 管理接口直接在表 common_credit_rule 中创建一条记录。完成后,在 Discuz 系统后台的积分策略中就能看见此条策略,然后通过 Discuz 后台UI设置对应的奖励周期和每次奖励的数值即可。

2、使用微信 JS-SDK 联动用户的分享行为,即当用户将相关应用页面分享到朋友圈后,执行步骤1所创建的积分规则。参考代码如下:

  1. wx.onMenuShareTimeline({
  2.         title: ”, // 分享标题
  3.         link: ”, // 分享链接
  4.         imgUrl: ”, // 分享图标
  5.         success: function () {
  6.                 // 用户确认分享后执行的回调函数
  7.                 $.ajax({
  8.                         type : ‘GET’,
  9.                         url : ‘plugin.php?id=yourpluginid&mod=credit&act=wxsharetimeline’,
  10.                         dataType : ‘xml’
  11.                 });
  12.         },
  13.         cancel: function () {
  14.         // 用户取消分享后执行的回调函数
  15.         }
  16. });

复制代码

代码解释:
本段代码来自微信 JS-SDK 说明文档,onMenuShareTimeline 用于匹配用户分享到朋友圈的行为,分享成功后会自动执行 success 下的代码。这里我们使用 ajax 实现, 本代码中 success 下的代码采用的是 jQuery 的 Ajax 写法,参数 url 则是服务端用于处理积分更新的地址。


3、服务端执行更新操作

  1. $rule = updatecreditbyaction(‘wxsharetimeline’, $uid);

复制代码

服务端执行积分更新操作的核心代码只有一条,就是调用函数 updatecreditbyaction, 此函数只要加载了 Discuz 内核即可执行。第一个参数则是需要用到的积分策略规则的 action 值,第二个参数是更新哪一个用户的数据。这两个参数为必填。如果同时还行更新用户的分享次数,则可以通过增加第三个参数实现,参考代码如下:

  1. $rule = updatecreditbyaction(‘wxsharetimeline’, $uid, array(‘sharings’ => 1));

复制代码

sharings 是表 common_member_count 中的字段,后面的数字是本次需要更新的值,1 表示 +1 操作。

完成以上三步,就能针对用户分享到朋友圈的行为进行相关的奖励。但是以上操作仅仅进行了积分数据的更新操作,而不能实现用户的积分变化的历史记录。

4、实现积分变动记录,则还需要同步更新 common_credit_log 以及 common_credit_log_field 等数据表。参考代码如下:

  1. include_once libfile(‘function/credit’);
  2. credit_log( $uid, ‘TSK’, $rule['rid'], array(‘extcredits2′ => 100), ‘ShareTimeLine’, ‘Share to Weixin Timeline’);

复制代码

代码解释:
Discuz 通过内置函数 credit_log 来实现积分变动的历史记录功能,使用改函数前需加载 function_credit.php 库文件。
函数原型如下:

  1. credit_log($uids, $operation, $relatedid, $data, $customtitle, $custommemo)

复制代码

$uids 为用户ID,可以是多用户ID的数组,也可以是单个用户ID值,当为数组的时候表示对多个用户执行了相同的积分变动。
$operation 是用户自定义操作类型,只能是 varchar[3] 类型,即类似与 “TSK” 的三个字符组成的短字符串,用于标识积分变动的类型。
$relatedid 是本次积分变动相关的ID号,可以根据实际情况使用用户ID,或者 credit_rule 的 ID。
$data 则是本次积分变动更新的具体积分项目,只能是系统内置的扩展积分项,即:extcredits1~extcredits8。
$customtitle, $custommemo 此两个参数可以省略,如果设置了此参数,则会同时更新表 common_credit_log_field,用于记录本次积分更新操作的用户自定义的更新原因,其中 customtitle 是标题, custommemo 是具体描述。


OVER(完)

原创文章如转载,请注明:转载自火跃工作室
本文网址:http://www.huoyue.org/discuzx-credit-log

日志信息 »

该日志于2016-04-01 16:53由 火跃 发表在discuz分类下, 评论已关闭。

相关日志 »

  • 暂无相关日志

没有评论

抱歉,评论被关闭