让Discuz论坛自动激活UCenter用户中心的用户
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/119/ ]
如果UCenter用户中心的用户没有在Discuz论坛中激活,就意味着论坛不存在这个用户.所以当论坛用户试图访问这位老朋友的空间的时候,就会吃闭门羹:您访问的用户不存在.即便是给网站新增了有可玩性的Discuz互动社区,但这样的论坛激活机制很不好,导致很多没在论坛中激活的用户如同消失了.
如果UCenter用户中心的用户没有在Discuz论坛中激活,就意味着论坛不存在这个用户。所以当论坛用户试图访问这位老朋友的空间的时候,就会吃闭门羹:您访问的用户不存在。即便是给网站新增了有可玩性的Discuz互动社区,但这样的论坛激活机制很不好,导致很多没在论坛中激活的用户如同消失了。
对于有大量用户的网站而言,当务之急就是让Discuz实现自动激活。今天研究了一下Discuz的激活机制,发现了其中的奥妙,接下来就给大家分享,如果实现自动激活Discuz论坛用户这个功能。思路如下:
1)获取UCenter用户中心的所有用户:$UcUser
2)获取Discuz论坛的所有用户(已激活用户):$DzUser
3)从$UcUser中排除掉$DzUser中的用户,得到代激活的用户:$UcUser
4)遍历$UcUser,依次执行激活操作
下边给出PHP代码的具体实现过程,直接在discuz根目录新建activation.php,代码如下:
<?php define('APPTYPEID', 0); define('CURSCRIPT', 'member'); require './source/class/class_core.php'; require './config/config_ucenter.php'; $discuz = C::app(); define('CURMODULE', $mod); $discuz->init(); require libfile('function/member'); require libfile('class/member'); $UcUser = array(); //获取UC用户中心的用户 $pquery = DB::query('select uid,username,email from ucenter.uc_members'); while($pquery && $post = DB::fetch($pquery)) { $UcUser[$post['uid']] = $post; } //获取Discuz中已激活的用户 $pquery = DB::query('select uid from discuz.pre_common_member'); while($pquery && $post = DB::fetch($pquery)) { //循环排除已激活的用户 unset($UcUser[ $post['uid'] ]); } $init_arr = array(0,0,0,0,0,0,0,0,0);//用户相关杂项 $groupid = 10;//用户组ID foreach($UcUser as $uid => $row) { //执行Discuz自带的激活操作 C::t('common_member')->insert($uid, $row['username'], md5(random(10)), $row['email'], $_G['clientip'], $groupid, $init_arr); }
保存完毕,直接通过浏览器访问PHP文件,即可实现自动激活。
如果对性能有更高的要求,可以优化一下获取激活用户那一部分的代码,就先写到这了。