discuz forums.inc.php,【Discuz】积分机制实现解析
1、積分設(shè)置
在論壇 管理界面》全局》積分設(shè)置 里進(jìn)行積分項(xiàng)目和積分規(guī)則的設(shè)置。可以用擴(kuò)展積分來(lái)實(shí)現(xiàn)諸如熱情、威望、貢獻(xiàn)、論壇幣等論壇激勵(lì)機(jī)制,可設(shè)定擴(kuò)展積分之間的兌換比例,可設(shè)置發(fā)帖、回復(fù)、加精、上傳附件等操作需要增加的積分及下載附件等操作需要扣除的積分,并可對(duì)不同版面設(shè)定不同的積分規(guī)則,可謂是靈活自由。
如下圖所示,有八個(gè)擴(kuò)展積分可供設(shè)置,可用積分名稱來(lái)命名你希望的名字,如熱情、威望、貢獻(xiàn)、論壇幣等。
Discuz擴(kuò)展積分設(shè)置
如下圖所示,可設(shè)置各個(gè)積分的在發(fā)帖、回復(fù)等操作時(shí)的增加規(guī)則。
Discuz 擴(kuò)展積分增加策略
2、代碼解析
以發(fā)一個(gè)回復(fù)為例,看一下加積分的過(guò)程。
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'];
說(shuō)明:以上代碼是讀取積分規(guī)則,各行分別對(duì)應(yīng)發(fā)帖、回復(fù)、加精、上傳附件對(duì)應(yīng)的加分規(guī)則,回復(fù)規(guī)則只看第二行;從代碼可以看出,論壇版塊的積分規(guī)則優(yōu)先于全局的積分規(guī)則。這個(gè)規(guī)則也就是上面我們?cè)诜e分設(shè)置里設(shè)定的。
2) 在include/newreply.inc.php中找到一下分別找到以下兩行代碼:
checklowerlimit($replycredits);
該行為檢測(cè)增減的積分下限是否符合系統(tǒng)設(shè)定,如不符合會(huì)給出警告消息;各項(xiàng)積分的操作下限在積分設(shè)置中設(shè)定;checklowerlimit($creditsarray, $coef = 1)函數(shù)定義位于include/global.func.php中。
updatepostcredits('+', $discuz_uid, $replycredits);
該行對(duì)積分進(jìn)行更新操作,并通過(guò)Cookie通知界面彈出積分增減提示;updatepostcredits($operator, $uidarray, $creditsarray)函數(shù)定義位于include/post.func.php中。
3) 在include/post.func.php的updatepostcredits函數(shù)定義中找到以下一行:
dsetcookie('discuz_creditnotice', implode('D', $cookiecredits).'D'.$discuz_uid, 43200, 0);
該行即是通過(guò)設(shè)置discuz_creditnotice的Cookie值來(lái)通知界面彈出積分增減提示的;discuz_creditnotice值為用D做分隔符的數(shù)字組合字符串,共10個(gè)數(shù)字,第0個(gè)為0無(wú)意義,第1到第8個(gè)數(shù)字依次對(duì)應(yīng)為各個(gè)擴(kuò)展積分變化的數(shù)值,即extcredits1~extcredits8,如不為0則會(huì)在界面彈出積分變化提示,第10個(gè)數(shù)字為當(dāng)前的用戶編號(hào)。例如discuz_creditnotice=0D5D-1D1D0D0D0D0D0D1時(shí)彈出下圖提示
Discuz積分增加提示
另外,在include/global.func.php中找到function updatecredits($uids, $creditsarray, $coef = 1, $extrasql = '')函數(shù),同樣是用于更新積分的,更加通用;其中$uids為逗號(hào)分隔的用戶編號(hào)字符串,$creditsarray為積分操作規(guī)則數(shù)組,$coef為積分系數(shù),?$extrasql為執(zhí)行積分UPDATE操作sql語(yǔ)句補(bǔ)充部分。用到的話看一下源碼會(huì)更清楚。舉兩個(gè)例子:
updatecredits($discuz_uid, $postattachcredits, count($attachments));
updatecredits(“1,2,3", array(2=>1,4=>-2), 3);
第一句摘自include/newreply.inc.php,為上傳附件時(shí)對(duì)$discuz_uid用戶以$postattachcredits的積分規(guī)則數(shù)組乘上附件數(shù)量的倍數(shù)來(lái)進(jìn)行積分更新;第二句為對(duì)用戶編號(hào)為1、2、3的用戶的extcredits2積分項(xiàng)增加1*3分,對(duì)extcredits4積分項(xiàng)增加-2*3分。
3、數(shù)據(jù)庫(kù)說(shuō)明
用戶的積分和擴(kuò)展積分存于cdb_members表,字段為credits、extcredits1、extcredits2、...、extcredits8,分別對(duì)應(yīng)用戶積分和8個(gè)擴(kuò)展積分。
論壇版塊的積分規(guī)則位于cdb_forumfields表,字段為postcredits、replycredits、getattachcredits、postattachcredits字段,分別對(duì)應(yīng)發(fā)帖、回復(fù)、下載附件、上傳附件的積分規(guī)則。
系統(tǒng)全局設(shè)置中積分設(shè)置信息位于cdb_settings表,variable中包含credit字符的表項(xiàng),可以用以下SQL語(yǔ)句查出
SELECT * FROM `cdb_settings` WHERE `variable` LIKE '%credit%'
本博客所有文章如無(wú)特別注明均為原創(chuàng)。
總結(jié)
以上是生活随笔為你收集整理的discuz forums.inc.php,【Discuz】积分机制实现解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 除权除息是什么意思?
- 下一篇: php判断除数是不是整数,五种js判断是