我在Discuz论坛提问的次数屈指可数,大多数不是什么技术难题,更多的只是一些小功能项的修改或者参数的定义,需要他人点拨下,但多数……好吧,准确的说,没有一次有得到过实质性答复的。 求人不如求己,还得自己来。我要搞定的是“Discuz! X积分变更记录前台和后台的写入”,也就是前台的积分记录和后台的积分变更记录的写入。 为何要搞这个呢?要将一个论坛的积分弄得那么清楚呢? 原因也很简单,淘金论坛的积分是可以提现的,且每周可提现的积分的额度在不断上升中。如果不能将每个会员的积分变化明细都呈现出来,那么势必会存在一定的安全隐患。 再回到记录写入的这个问题上面,对于熟悉Discuz! X的朋友来说,再简单不过了,分分秒秒可以搞定的事。但对于我而言,一时半会难以摸着头绪。 先是写入数据库的问题,知道要写入一条记录,但要写在哪个表,写入什么,没有可以参照的。虽然有看了下官方所提供的数据字典,但依旧迷糊。 于是求助了一位经常联系的朋友,他稍微点了下,我也就明白了。 Discuz中执行积分变更必不可少的一个参数就是updatemembercount了,所以,我们直接在我们要替换的插件文件中,查找updatemembercount,一般情况下,不难找到。 找到后,在该条记录的下方,添加一条记录的写入,如论坛的那个每日奖励的插件,我是这样子定义的: credit_log($_G[‘uid’],”mrj”,16,array (‘extcredits3’ => $vars_7ree[‘replyreward_7ree’]), $customtitle, $custommemo); 第一个参数,大伙应该都没问题,就是用户ID,而第二个参数,是代表此记录的名称,待会我们还需要定义下,第三个参数可以不用管,因为插件执行的话,一般都是插件页面,而第四个则是定义所要记录的积分类型,第五个、第六个也都可以不用管,但不能少,因为我试着去掉后,发现就没有写入了。 一般情况下,在积分变更的执行记录下方,添加这样一条日志记录,那么相应的在后台和前台都能显示了。但是,你会发现显示的文字不对,可能会直接显示为logs_credit_update_mrj,貌似名称没有定义。 这时就需要找寻相关的语言文件,来定义下。插件的语言文件一般放置在/source/language,lang_spacecp.php正是咱们前台积分记录中所需的语言支持文件。而后台文件,则是lang_admincp.php。只需添加这样一条记录即可,如: ‘logs_credit_update_mrj’ => ‘每日奖励’, 如果你只修改了lang_spacecp.php,那么后台有可能依旧无法显示出来,或者直接显示为’logs_credit_update_mrj’ 。是因为Discuz的插件语言包,即使的相同的几个字,前台和后台是分开的,所以你同样也要在lang_admincp.php这个文件中添加进去。 添加完毕,你就可以看下,是否前台和后台都有相应的记录了。 当然,每个插件执行积分变更的页面都不同,你需要在每个插件相应的页面中,都补充进去。我发现有意思的一点,就是绝大多数有带积分奖励的插件,都没有将积分变化的明细写入后台积分查看的系统中。我想可能也是因为,积分在他们整个论坛的体系中,并不是非常重要的一环。而我们就不同了,涉及到金钱的东西,马虎不得。 现在的话,淘金论坛大部分有带积分机制的插件,都有将记录写入前台和后台的变更中了。有利于大伙查看的同时,我审阅起来也更为方便。
|