discuz forums.inc.php,【Discuz】积分机制实现解析
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】积分机制实现解析相关推荐
- discuz插件,discuz采集插件,discuz插件工具
discuz插件,是discuz作为国内最大的论坛类型CMS经常使用到的一些功能,因为其本身功能满足不了站长们的需求,所以更多的是通过discuz插件来实现.特别是网站SEO优化方面,discuz插件 ...
- discuz 生成静态html,Discuz论坛静态化设置方法
URL静态化可以提高搜索引擎抓取,Discuz论坛程序是如何实现URL静态化的呢? 为给大家提供发布问题.解决问题.分享经验的平台,本站现已开启经验交流区(基于Discuz论坛程序). 刚使用Disc ...
- Lol的积分机制:埃罗(ELO)预算法详解
Lol的积分机制:埃罗(ELO)预算法详解 Lol中使用了一种被称为ELO的配对机制,玩家在进行标准赛(NormalGame)和排名赛(RankedGame)时,游戏会使用这套机制为玩家们寻找水平相近 ...
- 积分系统软件怎么做?如何用积分机制快速“抓住用户”?
随着各行各业特别是实体商家对于数字化工具的广泛使用,其中,积分系统对于实体客户的留存.转化相较于其他营销手段,拥有更好的数据反馈.简单而言,积分指的是在某个平台上流通的虚拟货币,可以辅助平台提升活动运 ...
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
<div id="container"> <div id="header"> <div class=&qu ...
- Apache Web服务器访问控制机制全解析
Apache Web服务器访问控制机制全解析 原文请见: http://netsecurity.51cto.com/art/201102/245666.htm Linux下的Aapche服务器提供了强 ...
- 【转】Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9153761 记得在前面的文章中,我带大家一起从源码的角度分析了Android中Vi ...
- Android 系统(59)---Android开发:Handler异步通信机制全面解析(包含Looper、Message Queue)
Android开发:Handler异步通信机制全面解析(包含Looper.Message Queue) 前言 最近刚好在做关于异步通信的需求,那么,今天我们来讲解下Android开发中的Handler ...
- php mvc例子,PHP_ThinkPHP的MVC开发机制实例解析,ThinkPHP是目前国内应用非常广 - phpStudy...
ThinkPHP的MVC开发机制实例解析 ThinkPHP是目前国内应用非常广泛的一款MVC开发框架.本文就以实例形式解析ThinkPHP的MVC开发机制.相信会给大家一定的启发作用.具体分析如下: ...
最新文章
- mysql如何防止插入重复数据_防止MySQL重复插入数据的三种方法
- redhat安装wine教程_可能是最漂亮的国产Linux,U盘安装DeepinLinux 深度操作系统
- Python基础day04【字典(介绍、定义与访问、操作数据、常见操作)】
- HTML5语言格式,HTML5 自然语言格式的输入表单
- 商汤押注AI教育,成立“商汤教育”子品牌
- Android 9.0/P 开发问题及解决方案汇总
- Android中Java与web通信
- 基于android的个人记账系统,android平台的个人记账系统的设计与实现.docx
- 最简单的黑客帝国代码雨教程C++
- 我的第一个项目(员工绩效管理系统 步骤超级详细---未完待更...)
- opta planner_使用Excel Christmas Planner进行整理
- python训练模型、如何得到模型训练总时长_【绝对干货】机器学习模型训练全流程!...
- 手把手教你用docker 搭建zoolkepper 和 dubbo 的测试环境
- 如何使用 Backblaze 和 Cloudflare 搭建免费 CDN - 让白-piao进行到底
- 爱奇艺自媒体平台如何入驻,被封怎么办?
- 现代OpenGL教程 02 - 贴图
- 英语不好,英语不好真的可以学编程吗?亲身经历告诉你
- 今天推荐一下网友张迪的博客
- php intersect,php array_intersect()函数使用代码
- 照片批量重命名为拍摄日期
热门文章
- Python 函数的可变参数、切片、迭代和列表生成式
- 不借助 Fiori client,直接在手机浏览器里调用 SAP UI5 BarcodeScanner 实现条形码扫描的可能性?
- 部署在SAP Cloud Platform CloudFoundry环境的应用如何消费SAP Leonardo机器学习API
- SAP Spartacus 4.0 源代码模式下开启 SSR,为什么会从本地去加载 all.css?
- SAP Spartacus Template-Driven Outlets
- 什么是 SAP vocabulary-based annotations
- css flex属性学习笔记
- 如何在SAP Spartacus里增添自定义的配置条目
- Angular里使用createEmbeddedView动态加入新的模板元素
- Angular reducer第一次被框架调用的单步调试细节