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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

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

發(fā)布時(shí)間:2023/12/19 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 discuz forums.inc.php,【Discuz】积分机制实现解析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。