1、积分设置

在论坛 管理界面》全局》积分设置 里进行积分项目和积分规则的设置。可以用扩展积分来实现诸如热情、威望、贡献、论坛币等论坛激励机制,可设定扩展积分之间的兑换比例,可设置发帖、回复、加精、上传附件等操作需要增加的积分及下载附件等操作需要扣除的积分,并可对不同版面设定不同的积分规则,可谓是灵活自由。

如下图所示,有八个扩展积分可供设置,可用积分名称来命名你希望的名字,如热情、威望、贡献、论坛币等。

Discuz扩展积分设置

如下图所示,可设置各个积分的在发帖、回复等操作时的增加规则。

Discuz 扩展积分增加策略

2、代码解析

以发一个回复为例,看一下加积分的过程。

1) 在post.php中找到以下代码段:$postcredits = $forum['postcredits'] ? $forum['postcredits'] : $creditspolicy['post'];

$replycredits = $forum['replycredits'] ? $forum['replycredits'] : $creditspolicy['reply'];

$digestcredits = $forum['digestcredits'] ? $forum['digestcredits'] : $creditspolicy['digest'];

$postattachcredits = $forum['postattachcredits'] ? $forum['postattachcredits'] : $creditspolicy['postattach'];

说明:以上代码是读取积分规则,各行分别对应发帖、回复、加精、上传附件对应的加分规则,回复规则只看第二行;从代码可以看出,论坛版块的积分规则优先于全局的积分规则。这个规则也就是上面我们在积分设置里设定的。

2) 在include/newreply.inc.php中找到一下分别找到以下两行代码:

checklowerlimit($replycredits);

该行为检测增减的积分下限是否符合系统设定,如不符合会给出警告消息;各项积分的操作下限在积分设置中设定;checklowerlimit($creditsarray, $coef = 1)函数定义位于include/global.func.php中。

updatepostcredits('+', $discuz_uid, $replycredits);

该行对积分进行更新操作,并通过Cookie通知界面弹出积分增减提示;updatepostcredits($operator, $uidarray, $creditsarray)函数定义位于include/post.func.php中。

3) 在include/post.func.php的updatepostcredits函数定义中找到以下一行:

dsetcookie('discuz_creditnotice', implode('D', $cookiecredits).'D'.$discuz_uid, 43200, 0);

该行即是通过设置discuz_creditnotice的Cookie值来通知界面弹出积分增减提示的;discuz_creditnotice值为用D做分隔符的数字组合字符串,共10个数字,第0个为0无意义,第1到第8个数字依次对应为各个扩展积分变化的数值,即extcredits1~extcredits8,如不为0则会在界面弹出积分变化提示,第10个数字为当前的用户编号。例如discuz_creditnotice=0D5D-1D1D0D0D0D0D0D1时弹出下图提示

Discuz积分增加提示

另外,在include/global.func.php中找到function updatecredits($uids, $creditsarray, $coef = 1, $extrasql = '')函数,同样是用于更新积分的,更加通用;其中$uids为逗号分隔的用户编号字符串,$creditsarray为积分操作规则数组,$coef为积分系数, $extrasql为执行积分UPDATE操作sql语句补充部分。用到的话看一下源码会更清楚。举两个例子:

updatecredits($discuz_uid, $postattachcredits, count($attachments));

updatecredits(“1,2,3", array(2=>1,4=>-2), 3);

第一句摘自include/newreply.inc.php,为上传附件时对$discuz_uid用户以$postattachcredits的积分规则数组乘上附件数量的倍数来进行积分更新;第二句为对用户编号为1、2、3的用户的extcredits2积分项增加1*3分,对extcredits4积分项增加-2*3分。

3、数据库说明

用户的积分和扩展积分存于cdb_members表,字段为credits、extcredits1、extcredits2、...、extcredits8,分别对应用户积分和8个扩展积分。

论坛版块的积分规则位于cdb_forumfields表,字段为postcredits、replycredits、getattachcredits、postattachcredits字段,分别对应发帖、回复、下载附件、上传附件的积分规则。

系统全局设置中积分设置信息位于cdb_settings表,variable中包含credit字符的表项,可以用以下SQL语句查出

SELECT * FROM `cdb_settings` WHERE `variable` LIKE '%credit%'

本博客所有文章如无特别注明均为原创。

discuz forums.inc.php,【Discuz】积分机制实现解析相关推荐

  1. discuz插件,discuz采集插件,discuz插件工具

    discuz插件,是discuz作为国内最大的论坛类型CMS经常使用到的一些功能,因为其本身功能满足不了站长们的需求,所以更多的是通过discuz插件来实现.特别是网站SEO优化方面,discuz插件 ...

  2. discuz 生成静态html,Discuz论坛静态化设置方法

    URL静态化可以提高搜索引擎抓取,Discuz论坛程序是如何实现URL静态化的呢? 为给大家提供发布问题.解决问题.分享经验的平台,本站现已开启经验交流区(基于Discuz论坛程序). 刚使用Disc ...

  3. Lol的积分机制:埃罗(ELO)预算法详解

    Lol的积分机制:埃罗(ELO)预算法详解 Lol中使用了一种被称为ELO的配对机制,玩家在进行标准赛(NormalGame)和排名赛(RankedGame)时,游戏会使用这套机制为玩家们寻找水平相近 ...

  4. 积分系统软件怎么做?如何用积分机制快速“抓住用户”?

    随着各行各业特别是实体商家对于数字化工具的广泛使用,其中,积分系统对于实体客户的留存.转化相较于其他营销手段,拥有更好的数据反馈.简单而言,积分指的是在某个平台上流通的虚拟货币,可以辅助平台提升活动运 ...

  5. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

    <div id="container">         <div id="header">     <div class=&qu ...

  6. Apache Web服务器访问控制机制全解析

    Apache Web服务器访问控制机制全解析 原文请见: http://netsecurity.51cto.com/art/201102/245666.htm Linux下的Aapche服务器提供了强 ...

  7. 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...

  8. Android 系统(59)---Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue)

    Android开发:Handler异步通信机制全面解析(包含Looper.Message Queue) 前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler ...

  9. php mvc例子,PHP_ThinkPHP的MVC开发机制实例解析,ThinkPHP是目前国内应用非常广 - phpStudy...

    ThinkPHP的MVC开发机制实例解析 ThinkPHP是目前国内应用非常广泛的一款MVC开发框架.本文就以实例形式解析ThinkPHP的MVC开发机制.相信会给大家一定的启发作用.具体分析如下: ...

最新文章

  1. mysql如何防止插入重复数据_防止MySQL重复插入数据的三种方法
  2. redhat安装wine教程_可能是最漂亮的国产Linux,U盘安装DeepinLinux 深度操作系统
  3. Python基础day04【字典(介绍、定义与访问、操作数据、常见操作)】
  4. HTML5语言格式,HTML5 自然语言格式的输入表单
  5. 商汤押注AI教育,成立“商汤教育”子品牌
  6. Android 9.0/P 开发问题及解决方案汇总
  7. Android中Java与web通信
  8. 基于android的个人记账系统,android平台的个人记账系统的设计与实现.docx
  9. 最简单的黑客帝国代码雨教程C++
  10. 我的第一个项目(员工绩效管理系统 步骤超级详细---未完待更...)
  11. opta planner_使用Excel Christmas Planner进行整理
  12. python训练模型、如何得到模型训练总时长_【绝对干货】机器学习模型训练全流程!...
  13. 手把手教你用docker 搭建zoolkepper 和 dubbo 的测试环境
  14. 如何使用 Backblaze 和 Cloudflare 搭建免费 CDN - 让白-piao进行到底
  15. 爱奇艺自媒体平台如何入驻,被封怎么办?
  16. 现代OpenGL教程 02 - 贴图
  17. 英语不好,英语不好真的可以学编程吗?亲身经历告诉你
  18. 今天推荐一下网友张迪的博客
  19. php intersect,php array_intersect()函数使用代码
  20. 照片批量重命名为拍摄日期

热门文章

  1. Python 函数的可变参数、切片、迭代和列表生成式
  2. 不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?
  3. 部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API
  4. SAP Spartacus 4.0 源代码模式下开启 SSR,为什么会从本地去加载 all.css?
  5. SAP Spartacus Template-Driven Outlets
  6. 什么是 SAP vocabulary-based annotations
  7. css flex属性学习笔记
  8. 如何在SAP Spartacus里增添自定义的配置条目
  9. Angular里使用createEmbeddedView动态加入新的模板元素
  10. Angular reducer第一次被框架调用的单步调试细节