Discuz教程网

x2.5发布了,可是重复扣积分还是照样,自己动手解决

[复制链接]
authicon dly 发表于 2012-6-9 21:03:44 | 显示全部楼层 |阅读模式
从x2开始一直有这个问题,一直等这解决方案,知道最近升级到了x2.5,这几天用来还是来问题,不知道是故意呢还是其他原因考虑,总之没解决问题就头大,老是有会员提到这问题,官方不解决只有自己动手了。
原理:
就是用个数据库保存会员下载信息,下次下载同一附件校验一下是否过期,没过期就不扣分。需要的字段,明白人都知道:aid,uid,dateline,再加个自增字段id

1、数据表如下图
194013t8lpw211urd2nn7w.jpg.thumb.jpg

创建数据库脚本,别告诉我你不懂
  1. --
  2. -- 表的结构 `pre_forum_attachment_once`
  3. --

  4. DROP TABLE IF EXISTS `pre_forum_attachment_once`;
  5. CREATE TABLE IF NOT EXISTS `pre_forum_attachment_once` (
  6. `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  7. `aid` mediumint(8) unsigned NOT NULL DEFAULT '0',
  8. `uid` mediumint(8) unsigned NOT NULL DEFAULT '0',
  9. `dateline` int(10) unsigned NOT NULL DEFAULT '0',
  10. PRIMARY KEY (`id`)
  11. ) TYPE=MyISAM AUTO_INCREMENT=8 ;
复制代码

2、修改forum_misc.php文件,路径:x:\你的网站目录\source\module\forum
查找代码
  1. $getattachcredits = updatecreditbyaction('getattach', $_G['uid'], array(), '', 1, 1, $thread['fid']);
复制代码

替换为
  1. $_G['policymsg'] = $p = '';

  2. //避免重复扣积分
  3. if(DB::fetch_first('SELECT * FROM '.DB::table('forum_attachment_once')." WHERE aid='$aid' AND uid='$_G[uid]'")) {

  4. $_G['policymsg'] = '积分不受影响';

  5. } else{
  6. $getattachcredits = updatecreditbyaction('getattach', $_G['uid'], array(), '', 1, 1, $thread['fid']);

  7. //forum_attachment_once插入下载记录
  8. DB::query('insert into '.DB::table('forum_attachment_once')." (`aid`, `uid`, `dateline`) VALUES ('$aid', '$_G[uid]', '$_G[timestamp]')");
  9. if($getattachcredits['updatecredit']) {
  10. if($getattachcredits['updatecredit']) for($i = 1;$i <= 8;$i++) {
  11. if($policy = $getattachcredits['extcredits'.$i]) {
  12. $_G['policymsg'] .= $p.($_G['setting']['extcredits'][$i]['img'] ? $_G['setting']['extcredits'][$i]['img'].' ' : '').$_G['setting']['extcredits'][$i]['title'].' '.$policy.' '.$_G['setting']['extcredits'][$i]['unit'];
  13. $p = ', ';
  14. }
  15. }
  16. }
  17. }
复制代码

3、光这些还不够,没有自动清除代码,下面我们在计划任务中添加个自动处理
将下面代码保存成文件cron_clean_forum_attachment_once.php,并放到x:\你的网站目录\source\include\cron目录
  1. <?php

  2. /**
  3. * diy编程器论坛 liyf 编写
  4. * http://kitebee.meibu.com
  5. * 2012.4.9
  6. * 清理forum_attachment_once表下载记录,默认保留1天
  7. * cron_clean_forum_attachment_once.php
  8. */

  9. if(!defined('IN_DISCUZ')) {
  10. exit('Access Denied');
  11. }

  12. //设置保留有效期天数
  13. $expire_date = 1; //默认设置为1天过期

  14. //将时间转为秒
  15. $deltime = $_G['timestamp'] - $expire_date*3600*24; //扣除有效期后剩余时间,秒

  16. //删除所有小于有效期的记录
  17. DB::query('delete from '.DB::table('forum_attachment_once')." where `dateline`<'$deltime'");

  18. ?>
复制代码


新建计划任务“清理用户下载附件表”
195341rrrr9cd80rcyr79q.jpg.thumb.jpg

任务脚本就是上面建的那个文件
195342tadkepmt2bovpbok.jpg

好了,全部搞定,自己去下个附件,第一次正常扣分,第二次嘛就是下面的效果了

最终效果图
1940141ll1a8877j8ph7aj.jpg

演示网站:http://kitebee.meibu.com
欢迎大家测试、探讨




上一篇:如何在DIY中,在商品帖中加上原价
下一篇:非诚勿扰X2&amp;X2.5兼容版【又见DSU插件】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 14:25

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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