discuz X3评分流程分析
<a target="_blank" href="http://blog.51cto.com/attachment/201309/143006974.png"></a>
一、涉及到的文件
discuzX3/source/template/default/forum/rate.htm
discuzX3/forum.php
discuzX3/source/module/forum/forum_misc.php
二、流程(注意:流程顺序也是按照上面文件依次向下)
如上图评分->进入到forum_misc.php文件中处理。大约第606行
<code>elseif</code><code>(</code><code>$_GET</code><code>[</code><code>'action'</code><code>] == </code><code>'rate'</code> <code>&& </code><code>$_GET</code><code>[</code><code>'pid'</code><code>]) {</code>
rate方法即为评分分值的加减操作。大约在672行
<code>foreach</code><code>(</code><code>$_G</code><code>[</code><code>'group'</code><code>][</code><code>'raterange'</code><code>] </code><code>as</code> <code>$id</code> <code>=> </code><code>$rating</code><code>) {</code>
<code> </code><code>$score</code> <code>= </code><code>intval</code><code>(</code><code>$_GET</code><code>[</code><code>'score'</code><code>.</code><code>$id</code><code>]);</code>
<code> </code><code>if</code><code>(isset(</code><code>$_G</code><code>[</code><code>'setting'</code><code>][</code><code>'extcredits'</code><code>][</code><code>$id</code><code>]) && !</code><code>empty</code><code>(</code><code>$score</code><code>)) {</code>
<code> </code>
<code> </code><code>//showmessage($id);</code>
<code> </code><code>$arr_goldId</code><code>[]=</code><code>$id</code><code>;</code>
<code> </code><code>$arr_goldValue</code><code>[]=</code><code>$score</code><code>;</code>
<code> </code><code>if</code><code>(</code><code>$rating</code><code>[</code><code>'isself'</code><code>] && (</code><code>intval</code><code>(</code><code>$_G</code><code>[</code><code>'member'</code><code>][</code><code>'extcredits'</code><code>.</code><code>$id</code><code>]) - </code><code>$score</code> <code>< 0)) {</code>
<code> </code><code>showmessage(</code><code>'thread_rate_range_self_invalid'</code><code>, </code><code>''</code><code>, </code><code>array</code><code>(</code><code>'extcreditstitle'</code> <code>=> </code><code>$_G</code><code>[</code><code>'setting'</code><code>][</code><code>'extcredits'</code><code>][</code><code>$id</code><code>][</code><code>'title'</code><code>]));</code>
<code> </code><code>}</code>
<code> </code><code>if</code><code>(</code><code>abs</code><code>(</code><code>$score</code><code>) <= </code><code>$maxratetoday</code><code>[</code><code>$id</code><code>]) {</code>
<code> </code><code>if</code><code>(</code><code>$score</code> <code>> </code><code>$rating</code><code>[</code><code>'max'</code><code>] || </code><code>$score</code> <code>< </code><code>$rating</code><code>[</code><code>'min'</code><code>]) {</code>
<code> </code><code>showmessage(</code><code>'thread_rate_range_invalid'</code><code>);</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>$creditsarray</code><code>[</code><code>$id</code><code>] = </code><code>$score</code><code>;</code>
<code> </code><code>if</code><code>(</code><code>$rating</code><code>[</code><code>'isself'</code><code>]) {</code>
<code> </code><code>$sub_self_credit</code><code>[</code><code>$id</code><code>] = -</code><code>abs</code><code>(</code><code>$score</code><code>);</code>
<code> </code><code>}</code>
<code> </code><code>$rate</code> <code>+= </code><code>$score</code><code>;</code>
<code> </code><code>$ratetimes</code> <code>+= </code><code>ceil</code><code>(max(</code><code>abs</code><code>(</code><code>$rating</code><code>[</code><code>'min'</code><code>]), </code><code>abs</code><code>(</code><code>$rating</code><code>[</code><code>'max'</code><code>])) / 5);</code>
<code> </code><code>}</code>
<code> </code><code>} </code><code>else</code> <code>{</code>
<code> </code><code>showmessage(</code><code>'thread_rate_ctrl'</code><code>);</code>
<code> </code><code>}</code>
<code>}</code>
这里DZ通过foreach循环分别获取用户的评分种类及相应分值。
<code>//showmessage($id);</code>
<code>$arr_goldId</code><code>[]=</code><code>$id</code><code>;</code>
<code>$arr_goldValue</code><code>[]=</code><code>$score</code><code>;</code>
数组$arr_goldId评分种类id;数组$arr_goldValue评分分值。
这里对“金钱”做二次开发:
<code>if</code><code>(</code><code>$arr_goldId</code><code>[0] == 2){</code>
<code> </code><code>$goldValue</code><code>=</code><code>$arr_goldValue</code><code>[0];</code>
<code>elseif</code><code>(</code><code>$arr_goldId</code><code>[0] == 1 && </code><code>$arr_goldId</code><code>[1] == 2){</code>
<code> </code><code>$goldValue</code><code>=</code><code>$arr_goldValue</code><code>[1];</code>
<code>} </code>
<code>if</code><code>(</code><code>$arr_goldId</code><code>[0] == 2 || (</code><code>$arr_goldId</code><code>[0] != 2 && </code><code>$arr_goldId</code><code>[1] == 2)){</code>
<code> </code>
<code> </code><code>/*****************************</code>
<code> </code><code>/*</code>
<code> </code><code>/****** To do something</code>
<code> </code><code>/******************************/</code>
<code> </code><code>//showmessage($goldValue);</code>
<code>showmessage(</code><code>'thread_rate_succeed'</code><code>, dreferer());</code>
本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1294298,如需转载请自行联系原作者