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】积分机制实现解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 除权除息是什么意思?
- 下一篇: php判断除数是不是整数,五种js判断是