如何在ecshop商城增加论坛
更新时间:2016-09-06 点击量:1644
Tag关键词: 商城 ecshop模板 ecshop4.0模板 二次开发 ecshop3.6模板 ecshop小程序
最近在做一个电子商务网站,需要在上面挂一个论坛,discuz无疑是最佳的选择,自然就得需要实现ecshop与discuz的同步登陆,否则空挂一个论 坛在上面毫无意义。
同步登陆不仅方便用户,也能很好的黏住用户和统一管理用户数据。好在之前研究过Ucenter的通信原理,所以实现起来还是比较有底气 的,不过还是花了几天的时间才搞定。
下面就谈谈ecshop和discuz的整合过程,整合过程中出现的问题及解决方法。
1.安装 ecshop和discuz,我用的ecshop版本大概是2.7,discuz选择的是x1.5,这个地方得注意编码的一致,否则后面会出错。
2.将 discuz中的uc_client整个文件夹直接copy到ecshop根目录下。
3.进入ecshop后台->会员整合->安装 Ucenter,这一步比较简单,一般不会出什么问题。
这三步完成后去discuz的ucenter后台->应用管理中查看ecshop和 discuz是否已经通信成功。
这三步完成后似乎就可以了,其实不然,还差得远呢。
整合过程中出现的几个问题及解决方法:
(1)通信失败;
(2)通信成功,但是ecshop和discuz不能同步登陆;
(3)ecshop新注册的用户到discuz登陆需要激活;
(4)ecshop新注册的 用户不能同步登陆到discuz;
(5)discuz注册的用户不能同步登陆到ecshop;
(6)在ecshop登陆或注册的用户,在discuz退出 后,不能同步退出到ecshop。
解决方法:
(1)查看Ucenter后台->应用管理,顶部提示如果通信失败尝试修改Ucenter的IP地址, 进去一看IP是127.0.0.1果然有问题,直接去掉,问题解决。
(2)通信成功但是不能同步登陆,用FF的firebug跟踪请求发现根本没有同步登 陆的请求,而且还报错:Bad Request,Invalid HostName,百思不得其解,
果断百度一下发现是discuz后台->站长->Ucenter设置中IP地址是127.0.0.1,直接 去掉,但是还不能同步登陆,跟踪discuz同步登陆的代码发现$_G['setting']['allowsynlogin']是0,
但是 Ucenter应用管理中明明已经开启同步登陆,于是想到可能是缓存的原因,去discuz后台更新缓存,结果同步登陆终于OK。
(3)跟踪同步登陆代码 发现ecshop新注册的用户只存放到Ucenter中,激活之后才会写入到pre_common_member中,同时dsetcookie。
这个问题 的解决方法很明显即增加对pre_common_member及pre_common_member_count的写入(该文件为discuz下的api 目录中的uc.php)。
if($member = DB::fetch($query)) {dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'),$cookietime); }else{//非激活状态下写入 $query = DB::query("SELECT email FROM ".DB::table('ucenter_members')." WHERE uid='$uid'"); if($a = DB::fetch($query)){ $email = $a['emaiil']; }else{ $email = ''; } $userdata = array( 'uid' = $get['uid'], 'username' = $get['username'], 'password' = $get['password'], 'email' = $email, 'adminid' = 0, 'groupid' = 10, 'regdate' = $get['time'], 'credits' = 0, 'timeoffset' = 9999); DB::insert('common_member', $userdata); DB::insert('common_member_count', array('uid'=>$get['uid'])); dsetcookie('auth', authcode("$get[password]\t$get[uid]", 'ENCODE'),$cookietime); }
加完之后此问题解决。(4)因为之前研究过Ucenter通信的原理,所以该问题的第一反应就是ecshop注册完后没有调用同步登陆的代码,于是找到ecshop注册文件user.php在注册代码后面加上:
$user->login($username,$password);$ucdata = isset($user->ucdata) ? $user->ucdata : '';
问题顺利解决。(5)该问题跟(4)一样的道理,也是在注册文件member_register.php中增加同步登陆的调用:
$synlogin = $_G['setting']['allowsynlogin'] ? uc_user_login($_G['uid']) : '';
这 个地方需要注意:一定要在注册模板register.htm中输出$synlogin,因为这个返回值其实就是一段js脚本(发同步登陆的通知),需要放 到页面中才能执行。该问题也顺利得到解决。(6)这个问题比较怪异,在ecshop登陆后只能在ecshop同步退出,在discuz则不能,而如果在 discuz登陆,在ecshop和discuz均能同步退出。用firebug查看cookie发现从discuz退出的时候cookie也已经清空, 但就是不能在ecshop同步退出,困惑之下只能google,按照上面的一个说法在清空cookie时增加第四个cookie路径参数,问题果然得到解 决,看来操作cookie的时候真的得注意cookie的路径及域。
如果文章对您有帮助,就打赏一个吧
«上一篇:ECShop 搬家教程:ecshop备份数据 ecshop转移数据 ecshop更换主机 下一篇:ECShop2.7.3安装过程中可能会出现的问题及解决方法»