Discuz的勋章颁发有一定问题,如果给用户颁发一个勋章,有效期30天,那么在用户的勋章还有5天到期的时候再次给用户颁发这个勋章,那么会是一个全新的有效期,即30天,今天帮客户解决的就是多次颁发勋章,有效期累计的问题。通过分析源码发现,给用户颁发一次勋章就会往form_medallog表里插入一条记录,其中expiration字段代表有效期,大体思路有了,在颁发勋章操作里,插入新的勋章前,先查找表里该用户已经有的这个勋章是否过了有效期,如果没有,那么用这个有效期减去当前时间戳得到上个勋章剩余的有效期,插入新的勋章的时候,把这个剩余有效期添加进去,代码其实很简单。修改的文件为source/admincp/admincp_members.phpforeach($medalsnewarray as $medalnewarray) { $sql = "select * from ".DB::table('forum_medallog')." where uid = {$medalnew['uid']} and medalid = {$medalnewarray['medalid']} order by id desc limit 1"; $lastmedal = DB::fetch_first($sql); // 旧勋章未到期的时间 $lasttime = $lastmedal['expiration'] > TIMESTAMP ? $lastmedal['expiration'] - TIMESTAMP : 0; $data = array( 'uid' => $medalnew['uid'], 'medalid' => $medalnewarray['medalid'], 'type' => 0, 'dateline' => $_G['timestamp'], 'expiration' => $medalnewarray['expiration'] + $lasttime, 'status' => $medalnewarray['status'], ); C::t('forum_medallog')->insert($data); C::t('common_member_medal')->insert(array('uid' => $medalnew['uid'], 'medalid' => $medalnewarray['medalid']), 0, 1);}写完,收工!
转载于:http://www.nciaer.com/thread-15-1-1.html
历史资源提醒--必看
该页面资源/教程来自原魔趣吧历史资源转移,因发布历史久远,部分资源/教程可能已失效或无法在最新版程序中安装使用!DZ资源建议在Discuz3.4及以下版本使用,PHP版本建议5.6。资源仅提供做代码研究学习使用!
因改版,部分贴内链接将无法正常跳转,如链接失效或未正常跳转,请利用站内搜索功能搜索资源名称获取对应资源!