日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

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

發布時間:2023/12/19 php 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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】积分机制实现解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。