首页
站长论坛BBS
救助
投稿
discuz视频教程
discuz技术支持
版块
登录
快速注册

DiscuzX用户组过期问题解决方法

 
ARCHY 2015-7-31 [安装使用] 来自PC 复制链接
8361527
discuz使用视频教程
31idc

马上注册,一起探讨正确快速的建站方法

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
解决discuz用户组过期不能自动切换的问题,就拿DiscuzX2.5作为例子,在N多人去官方论坛投诉后,官方最终加上了一段代码。但是随后都反映说这用户组过期问题还是存在,然后这个问题就这样存在着。。

在仔细看完了discuz论坛的整个代码后发现,官方给出的代码大部分是没有错误的,但是有一个致命的问题写错了,导致不能正常过期。下面我们就来修改这个bug。首先我们要找到打开source\include\spacecp\spacecp_usergroup.php这个文件,找到299行左右,

  1. foreach(explode("\t", $_G['forum_extgroupids']) as $extgroupid) {
复制代码

修改为
游客,如果您要查看本帖隐藏内容请回复

修改完后,以后的用户组过期就会得到解决。

如果你以前就有很多的过期用户想清理掉怎么办呢?这个的要修改source\class\discuz\discuz_application.php这个文件了。
原理就是在用户今日论坛的时候自动检测一下是否过期,如果过期就自动切换到原来的用户组上去。

打开discuz_application.php文件,大概在433行左右,找到

if($user && $user['groupexpiry'] > 0 && $user['groupexpiry'] < TIMESTAMP && (getgpc('mod') != 'spacecp' || CURSCRIPT != 'home')) {
在他上面添加内容并重写成以下的代码

  1. $groupterms = unserialize(DB::result_first("SELECT groupterms FROM ".DB::table('common_member_field_forum')." WHERE uid='".getglobal('uid', 'member')."'"));
  2.                         $termsarray = array();
  3.                         if(!empty($groupterms['ext']) && is_array($groupterms['ext'])) {
  4.                                 $termsarray = $groupterms['ext'];
  5.                 }
  6.                         if(!empty($groupterms['main']['time']) && (empty($termsarray[$_G['groupid']]) || $termsarray[$_G['groupid']] > $groupterm['main']['time'])) {
  7.                                 $termsarray[$_G['groupid']] = $groupterms['main']['time'];
  8.                         }

  9.                         foreach($termsarray as $expgroupid => $expiry) {
  10.                                 if($expiry <= TIMESTAMP) {
  11.                                         $user_expiry = 1;
  12.                                 }
  13.                         }

  14.                         if($user && (( $user['groupexpiry'] > 0 && $user['groupexpiry'] < TIMESTAMP) || $user_expiry == 1) && (getgpc('mod') != 'spacecp' || CURSCRIPT != 'home')) {
  15.                                 dheader('location: home.php?mod=spacecp&ac=usergroup&do=expiry');
  16.                         }
复制代码


保存文件,修改完成。

每当用户刷新页面的时候,自动检测是否到达过期时间,如果到达的话,就自动切换当前用户组。
如果以上方法不能解决你的问题,可以查看之前Disucz x2官方提供的用户组到期后不自动切换解决方案



上一篇:远景论坛让Discuz发送修改密码提醒邮件的方法
下一篇:让DiscuzX2.5加上回帖支持功能
cqzg 发表于 2015-7-31 16:44:00 来自PC
先看一下。
小钥匙 发表于 2015-7-31 21:13:39 来自PC
感谢楼主无私的分享与奉献
诺柚网:http://www.nuoui.com/
chxmoon 发表于 2015-8-3 13:05:01 来自PC
强烈支持,站帮网有你更精彩
UC955 发表于 2015-8-4 06:29:08 来自PC
感谢楼主无私的分享与奉献
luxiren 发表于 2015-8-4 17:30:38 来自PC
很给力,希望分享更多给力的帖子啊。
萍乡在线www.pxol.com.cn
华哥哥来了 发表于 2015-8-5 22:33:23 来自PC
强烈支持,站帮网有你更精彩
jhwddx123 发表于 2015-8-8 17:50:02 来自PC
强烈支持,站帮网有你更精彩
天外飘仙 发表于 2015-8-12 11:26:56 来自PC
很给力,希望分享更多给力的帖子啊。
passer 发表于 2015-8-12 15:33:46 来自PC
这个问题困扰很久了
pkdu 发表于 2015-8-13 10:10:28 来自PC
可是找不到这代码啊。我3.1的
aken 发表于 2015-8-14 10:59:38 来自PC
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
疯狂的大猫 发表于 2015-8-18 14:52:38 来自PC
感谢楼主无私的分享与奉献
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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