天天看点

discuz X3评分流程分析

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

二、流程(注意:流程顺序也是按照上面文件依次向下)

如上图评分-&gt;进入到forum_misc.php文件中处理。大约第606行

<code>elseif</code><code>(</code><code>$_GET</code><code>[</code><code>'action'</code><code>] == </code><code>'rate'</code> <code>&amp;&amp; </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>=&gt; </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>]) &amp;&amp; !</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>] &amp;&amp; (</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>&lt; 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>=&gt; </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>) &lt;= </code><code>$maxratetoday</code><code>[</code><code>$id</code><code>]) {</code>

<code>            </code><code>if</code><code>(</code><code>$score</code> <code>&gt; </code><code>$rating</code><code>[</code><code>'max'</code><code>] || </code><code>$score</code> <code>&lt; </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 &amp;&amp; </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 &amp;&amp; </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,如需转载请自行联系原作者