Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
liyf 发表于 2012-4-9 19:56:30 | 显示全部楼层 |阅读模式
本帖最后由 liyf 于 2012-4-9 19:58 编辑

       从x2开始一直有这个问题,一直等这解决方案,知道最近升级到了x2.5,这几天用来还是来问题,不知道是故意呢还是其他原因考虑,总之没解决问题就头大,老是有会员提到这问题,官方不解决只有自己动手了。
      原理:
      就是用个数据库保存会员下载信息,下次下载同一附件校验一下是否过期,没过期就不扣分。需要的字段,明白人都知道:aid,uid,dateline,再加个自增字段id

1、数据表如下图


创建数据库脚本,别告诉我你不懂
  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.          
  5.         $_G['policymsg'] = '积分不受影响';
  6.         
  7. } else{
  8.         $getattachcredits = updatecreditbyaction('getattach', $_G['uid'], array(), '', 1, 1, $thread['fid']);
  9.         
  10.         //forum_attachment_once插入下载记录
  11.   DB::query('insert into '.DB::table('forum_attachment_once')." (`aid`, `uid`, `dateline`) VALUES ('$aid', '$_G[uid]', '$_G[timestamp]')");
  12.         if($getattachcredits['updatecredit']) {
  13.                 if($getattachcredits['updatecredit']) for($i = 1;$i <= 8;$i++) {
  14.                         if($policy = $getattachcredits['extcredits'.$i]) {
  15.                                 $_G['policymsg'] .= $p.($_G['setting']['extcredits'][$i]['img'] ? $_G['setting']['extcredits'][$i]['img'].' ' : '').$_G['setting']['extcredits'][$i]['title'].' '.$policy.' '.$_G['setting']['extcredits'][$i]['unit'];
  16.                                 $p = ', ';
  17.                         }
  18.                 }
  19.         }
  20. }
复制代码
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. ?>
复制代码
新建计划任务“清理用户下载附件表”

任务脚本就是上面建的那个文件

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

最终效果图

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

1

查看全部评分

chico 发表于 2012-4-9 20:35:09 | 显示全部楼层
是高手,学习了
回复

使用道具 举报

 楼主| liyf 发表于 2012-4-9 21:52:30 | 显示全部楼层
没办法了,等了这么久都没有说解决这个问题
回复

使用道具 举报

carlkyo 发表于 2012-4-9 21:58:12 | 显示全部楼层
杯具了
回复

使用道具 举报

 楼主| liyf 发表于 2012-4-9 22:05:05 | 显示全部楼层
我自己改好了啊,欢迎测试
回复

使用道具 举报

go123 发表于 2012-4-10 10:57:04 | 显示全部楼层
自己动手,丰衣足食!
回复

使用道具 举报

xjjyho 发表于 2012-4-10 16:22:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

npx2011 发表于 2012-4-11 16:50:21 | 显示全部楼层
少年不知母亲那句话的含义,渐渐长大了,才明白其意。春天在故乡的大地上,倾其所能给万物萌发勃勃生机与希望。就像母亲一样的把全部的爱给了我们,那爱像那四月金灿灿的油菜花一样平凡质朴。在这片生机盎然的土地,春天给人们带来希望,也让母亲心中涌动起对美好生活的憧憬。
回复

使用道具 举报

zhangxiang0565 发表于 2012-4-16 13:18:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

我的小情情2 发表于 2012-4-16 13:23:43 | 显示全部楼层
好贴,绝对要支持下!!~~
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-15 15:37 , Processed in 0.047500 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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