Discuz! 官方站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 42043|回复: 39

回帖奖励功能分析

[复制链接]
发表于 2011-9-30 10:33:58 | 显示全部楼层 |阅读模式
本帖最后由 dongdong0925 于 2011-9-30 10:33 编辑

进入source\include\post\post_newreply.php文件,在438行附近找到如下代码:
  1. if($thread['replycredit'] > 0 && $thread['authorid'] != $_G['uid'] && $_G['uid']) {
复制代码
如果$thread['replycredit']大于0,同时帖子作者不是当前登录用户,则进入下面的处理流程。
$thread['replycredit']为当前帖子的回帖奖励总积分。
  1. $replycredit_rule = DB::fetch_first("SELECT * FROM ".DB::table('forum_replycredit')." WHERE tid = '$_G[tid]' LIMIT 1");
  2. $have_replycredit = DB::result_first("SELECT COUNT(*) FROM ".DB::table('common_credit_log')." WHERE relatedid = '{$_G[tid]}' AND uid = '{$_G[uid]}' AND operation = 'RCA' LIMIT {$replycredit_rule['times']} ");
复制代码
$replycredit_rule为从forum_replycredit表中查询该帖的回帖奖励设置数组,具体格式为
  1. array(
  2.         'tid' => '帖子tid',
  3.         'extcredits' => '每次回帖的奖励积分',
  4.         'times' => '奖励次数',
  5.         'membertimes' => '每个人最多奖励的次数',
  6.         'random' => '中奖率',
  7.         'extcreditstype' => '奖励的积分类型',
  8. )
复制代码
$have_replycredit为从common_credit_log表中查询该帖中当前登录用户的已奖励次数。
  1. if($replycredit_rule['membertimes'] - $have_replycredit > 0 && $thread['replycredit'] - $replycredit_rule['extcredits'] >= 0) {
复制代码
如果该帖的每个人最多奖励次数$replycredit_rule['membertimes']大于该帖中当前登录用户的已奖励次数$have_replycredit,同时该帖的回帖奖励总积分$thread['replycredit']大于或等于该帖每次回帖的奖励积分$replycredit_rule['extcredits']。
  1. $replycredit_rule['extcreditstype'] = $replycredit_rule['extcreditstype'] ? $replycredit_rule['extcreditstype'] : $_G['setting']['creditstransextra'][10];
复制代码
$replycredit_rule['extcreditstype']为该帖奖励积分的积分类型,如果存在$replycredit_rule['extcreditstype']的话就为$replycredit_rule['extcreditstype'],否则为$_G['setting']['creditstransextra'][10]。
$_G['setting']['creditstransextra'][10]为后台->全局->积分设置下设置的回帖奖励使用的积分。
  1. if($replycredit_rule['random'] > 0) {
  2.                 $rand = rand(1, 100);
  3.                 $rand_replycredit = $rand <= $replycredit_rule['random'] ? true : false ;
  4. } else {
  5.                 $rand_replycredit = true;
  6. }
复制代码
如果该帖回帖奖励的中奖率$replycredit_rule['random']大于0:
$rand为在1-100中间生成的一个随机数,如果$rand小于或等于$replycredit_rule['random'],则设置$rand_replycredit为true,否则为false。
如果该帖回帖奖励的中奖率$replycredit_rule['random']不大于0:
设置$rand_replycredit为true。
  1. if($rand_replycredit) {
  2.                 if(!$posttable) {
  3.                                 $posttable = getposttablebytid($_G['tid']);
  4.                 }
  5.                 updatemembercount($_G['uid'], array($replycredit_rule['extcreditstype'] => $replycredit_rule['extcredits']), 1, 'RCA', $_G[tid]);
  6.                 DB::update($posttable, array('replycredit' => $replycredit_rule['extcredits']), array('pid' => $pid));
  7.                 DB::update("forum_thread", array('replycredit' => $thread['replycredit'] - $replycredit_rule['extcredits']), array('tid' => $_G[tid]));
  8. }
复制代码
如果存在$rand_replycredit:
  1. if(!$posttable) {
  2. $posttable = getposttablebytid($_G['tid']);
  3. }
复制代码
如果不存在回帖表$posttable,则通过tid获取$posttable。
  1. updatemembercount($_G['uid'], array($replycredit_rule['extcreditstype'] => $replycredit_rule['extcredits']), 1, 'RCA', $_G[tid]);
复制代码
根据回帖奖励的规则,更新当前登录用户的积分:在原有积分基础上+$replycredit_rule['extcredits']。$replycredit_rule['extcreditstype']为积分类型,$replycredit_rule['extcredits']为奖励积分数。
  1. DB::update($posttable, array('replycredit' => $replycredit_rule['extcredits']), array('pid' => $pid));
复制代码
更新回帖表$posttable中当前用户回复的积分奖励。
  1. DB::update("forum_thread", array('replycredit' => $thread['replycredit'] - $replycredit_rule['extcredits']), array('tid' => $_G[tid]));
复制代码
$thread['replycredit'] - $replycredit_rule['extcredits']为计算回帖奖励的剩余总积分。
更新主题表forum_thread中当前帖子的回帖奖励总积分replycredit。



发表于 2011-9-30 11:50:57 | 显示全部楼层
沙发吗?
回复

使用道具 举报

发表于 2011-9-30 12:11:06 | 显示全部楼层
本帖最后由 ARCHY` 于 2011-9-30 12:11 编辑

{:soso_e102:}支持下了
回复

使用道具 举报

发表于 2011-9-30 21:23:58 | 显示全部楼层
恩,学习了!
回复

使用道具 举报

头像被屏蔽
发表于 2011-9-30 22:04:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2011-10-1 12:24:09 | 显示全部楼层
谢谢。。。。
回复

使用道具 举报

发表于 2011-10-1 19:26:02 | 显示全部楼层
:victory:
回复

使用道具 举报

发表于 2011-10-1 19:38:57 | 显示全部楼层
支持一下。
回复

使用道具 举报

发表于 2011-10-2 11:26:03 | 显示全部楼层
来学习
。。。
回复

使用道具 举报

发表于 2011-10-3 11:43:27 | 显示全部楼层
这个为什么要弄?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

腾讯云市场年终大促!Discuz X3.4论坛系统免费用,虚拟主机低至20元/月,爆款小程序1元起!

小黑屋|Discuz! 官方站 ( 粤B2-20090059-165 )star

GMT+8, 2020-2-20 20:30

Powered by Discuz! X3.3

Copyright © 2001-2019 Tencent Cloud.

快速回复 返回顶部 返回列表