您现在的位置是:首页 > 教程 > ecshop商城教程ecshop商城教程
ecshop会员整合ecshop与discuz论坛整合教程
夜蓉2024-01-01 21:13:13ecshop商城教程已有人查阅
导读步骤一,安装ecshop和discuz第二步,ecshop会员整合->安装UCenter第三步,测试同步登陆和同步退出
我们要实现的效果是
1、ec login dx login ec logout dx logout -> ecshop登陆 discuz登陆,ecshop退出 discuz退出
2、ec login dx login dx logout ec logout -> ecshop登陆 discuz登陆,discuz退出 ecshop退出
3、dx login ec login dx logout ec logout -> discuz登陆 ecshop登陆,discuz退出 ecshop退出
4、dx login ec login ec logout dx logout -> discuz登陆 ecshop登陆,ecshop退出 discuz退出
步骤一,安装ecshop和discuz
安装包的文件编码统一和安装过程这里略过了
第二步,ecshop会员整合->安装UCenter
把discuz安装包里面的 uc_client 文件夹 一份到 ecshop 网站目录下。
ecshop后台->会员管理->会员整合
最后登陆uc_server看“应用管理”是否通信成功
第三步,测试同步登陆和同步退出
通信成功后,我们在ecshop网站上注册一个新用户,注册成功后,并自动登陆,再打开discuz网站,发现没有同步登陆。
查看uc_server->用户管理 里面有刚刚ecshop注册的那个新用户了,再看discuz后台管理 -> 用户 -> 用户管理 里面没有这个新用户。
回到ecshop注册页面的php处理,user.php,大概在272行,
$ucdata = empty($user->ucdata)? "" : $user->ucdata;
改成
$user->login($username,$password);$ucdata = isset($user->ucdata) ? $user->ucdata : '';
$user->login的相关详细介绍可以参考ecshop中$user对象
再来重新注册一个新ecshop用户,跟踪同步登陆代码,发现ecshop新注册的用户还是只存放到Ucenter中,需要激活之后才会写入到pre_common_member中,同时dsetcookie()。
这个问题的解决方法增加对pre_common_member及pre_common_member_count的写入(该文件为discuz下的api目录中的uc.php)
大概191行:
通信成功,不能同步登陆 和 新用户需要激活问题,解决!
还记得最前面我们要的效果吗?
1、ec login dx login ec logout dx logout -> ecshop登陆 discuz登陆,ecshop退出 discuz退出
在ecshop中退出,发现discuz没有退出,继续找问题。
在ecshop程序的 includes\modules\integrates\ucenter.php 文件logout()方法中,第205行
所以上面的代码应该修改成:
$this->ucdata = uc_call("uc_user_synlogout",array("0")); //同步退出
或者修改 ecshop程序的 includes\lib_common.php 大概2152行中
function uc_call($func, $params=null)
修改成
function uc_call($func, $params=array())
这样,我们的个效果就完成了。
2、ec login dx login dx logout ec logout ->ecshop登陆discuz登陆,discuz退出ecshop退出
个效果做好后,发现第二个效果有问题,discuz退出,ecshop没有退出。
继续找原因,在ecshop登陆后,discuz 点退出,
会发送一个javascript申请到/api/uc.php的 logout请求( 如果setcookie 只是在/bbs/下设置cookie 为空,那么就清空不了cookie )
所以ecshop程序 api/uc.php 里面是function set_cookie( 方法应该是这样
这样,我们的第2个效果也完成了。然后你会发现,当你把和第二个效果完成了,第三和第四也是OK的了。
过程中修改的文件有:
discuz程序:
api\uc.php
uc_client\data\cache\apps.php
ecshop程序:
user.php
api\uc.php
includes\lib_common.php
includes\modules\integrates\ucenter.php
ecshop ucenter卸载
登录ecshop后台,“SQL查询”提交以下语句,清除缓存!
update ecs_shop_config set value='ecshop' where code='integrate_code';update ecs_shop_config set value='' where code='integrate_config';
这里的SQL将整合信息还原成默认的ecshop方式,然后清空整合数据。
注意:如果你的数据表前缀不是ecs_ 请自行修改
1、ec login dx login ec logout dx logout -> ecshop登陆 discuz登陆,ecshop退出 discuz退出
2、ec login dx login dx logout ec logout -> ecshop登陆 discuz登陆,discuz退出 ecshop退出
3、dx login ec login dx logout ec logout -> discuz登陆 ecshop登陆,discuz退出 ecshop退出
4、dx login ec login ec logout dx logout -> discuz登陆 ecshop登陆,ecshop退出 discuz退出
步骤一,安装ecshop和discuz
安装包的文件编码统一和安装过程这里略过了
第二步,ecshop会员整合->安装UCenter
把discuz安装包里面的 uc_client 文件夹 一份到 ecshop 网站目录下。
ecshop后台->会员管理->会员整合
最后登陆uc_server看“应用管理”是否通信成功
第三步,测试同步登陆和同步退出
通信成功后,我们在ecshop网站上注册一个新用户,注册成功后,并自动登陆,再打开discuz网站,发现没有同步登陆。
查看uc_server->用户管理 里面有刚刚ecshop注册的那个新用户了,再看discuz后台管理 -> 用户 -> 用户管理 里面没有这个新用户。
回到ecshop注册页面的php处理,user.php,大概在272行,
$ucdata = empty($user->ucdata)? "" : $user->ucdata;
改成
$user->login($username,$password);$ucdata = isset($user->ucdata) ? $user->ucdata : '';
$user->login的相关详细介绍可以参考ecshop中$user对象
再来重新注册一个新ecshop用户,跟踪同步登陆代码,发现ecshop新注册的用户还是只存放到Ucenter中,需要激活之后才会写入到pre_common_member中,同时dsetcookie()。
这个问题的解决方法增加对pre_common_member及pre_common_member_count的写入(该文件为discuz下的api目录中的uc.php)
大概191行:
if(($member = getuserbyuid($uid, 1))) {
dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);}
修改成
if(($member = getuserbyuid($uid, 1))) {
dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);}else{
//下面为增加部分
$username = $get['username'];
$password = md5(time().rand(100000, 999999));
$email = $get['email'];
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$userdata = array(
'uid' => $uid,
'username' => $username,
'password' => $password,
'email' => $email,
'adminid' => 0,
'groupid' => 10,
'regdate' => $time,
'credits' => 0,
'timeoffset' => 9999
);
DB::insert('common_member', $userdata);
$status_data = array(
'uid' => $uid,
'regip' => $ip,
'lastip' => $ip,
'lastvisit' => $time,
'lastactivity' => $time,
'lastpost' => 0,
'lastsendmail' => 0,
);
DB::insert('common_member_status', $status_data);
DB::insert('common_member_profile', array('uid' => $uid));
DB::insert('common_member_field_forum', array('uid' => $uid));
DB::insert('common_member_field_home', array('uid' => $uid));
DB::insert('common_member_count', array('uid' => $uid));
$query = DB::query("SELECT uid, username, password FROM ".DB::table('common_member')." WHERE uid='$uid'");
if($member = DB::fetch($query)) {
dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
}}
最后,更新3个后台的缓存,ecshop后台,discuz后台,Ucenter后台。再来注册或者登陆,可以同步登陆了。通信成功,不能同步登陆 和 新用户需要激活问题,解决!
还记得最前面我们要的效果吗?
1、ec login dx login ec logout dx logout -> ecshop登陆 discuz登陆,ecshop退出 discuz退出
在ecshop中退出,发现discuz没有退出,继续找问题。
在ecshop程序的 includes\modules\integrates\ucenter.php 文件logout()方法中,第205行
$this->ucdata = uc_call("uc_user_synlogout"); //同步退出
发现调用call_user_func_array 时必须要二个参数都要有,否则无法调用所以上面的代码应该修改成:
$this->ucdata = uc_call("uc_user_synlogout",array("0")); //同步退出
或者修改 ecshop程序的 includes\lib_common.php 大概2152行中
function uc_call($func, $params=null)
修改成
function uc_call($func, $params=array())
这样,我们的个效果就完成了。
2、ec login dx login dx logout ec logout ->ecshop登陆discuz登陆,discuz退出ecshop退出
个效果做好后,发现第二个效果有问题,discuz退出,ecshop没有退出。
继续找原因,在ecshop登陆后,discuz 点退出,
会发送一个javascript申请到/api/uc.php的 logout请求( 如果setcookie 只是在/bbs/下设置cookie 为空,那么就清空不了cookie )
所以ecshop程序 api/uc.php 里面是function set_cookie( 方法应该是这样
function set_cookie($user_id='', $user_name = '', $email = ''){
if (empty($user_id))
{
/* 摧毁cookie */
$time = time() - 3600;
//setcookie('ECS[user_id]', '', $time);
//setcookie('ECS[username]', '', $time);
//setcookie('ECS[email]', '', $time);
setcookie('ECS[user_id]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie('ECS[username]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie('ECS[email]', '', $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
}
else
{
/* 设置cookie */
$time = time() + 3600 * 24 * 30;
setcookie("ECS[user_id]", $user_id, $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie("ECS[username]", $user_name, $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
setcookie("ECS[email]", $email, $time, $GLOBALS['cookie_path'], $GLOBALS['cookie_domain']);
}}
还有要修改ecshop的 ucenter插件,includes/modules/integrates/ucenter.php
function ucenter($cfg)
{
parent::integrate(array());
$this->user_table = 'users';
$this->field_id = 'user_id';
$this->field_name = 'user_name';
$this->field_pass = 'password';
$this->field_email = 'email';
$this->field_gender = 'sex';
$this->field_bday = 'birthday';
$this->field_reg_date = 'reg_time';
$this->need_sync = false;
$this->is_ecshop = 1;
$this->cookie_path = $GLOBALS['cookie_path'];//wuruhua
$this->cookie_domain = $GLOBALS['cookie_domain'];//wuruhua
function set_cookie($username='')
{
if (empty($username))
{
/* 摧毁cookie */
$time = time() - 3600;
//setcookie("ECS[user_id]", '', $time, $this->cookie_path);
//setcookie("ECS[password]", '', $time, $this->cookie_path);
setcookie("ECS[user_id]", '', $time, $this->cookie_path, $this->cookie_domain); //wuruhua
setcookie("ECS[password]", '', $time, $this->cookie_path, $this->cookie_domain);//wuruhua
}
最后,如果你发现2个程序的uc_client配置文件不一致的话,还要把ecshop程序下的 uc_client\data\cache\apps.php->覆盖到discuz程序下的uc_client\data\cache\apps.php这样,我们的第2个效果也完成了。然后你会发现,当你把和第二个效果完成了,第三和第四也是OK的了。
过程中修改的文件有:
discuz程序:
api\uc.php
uc_client\data\cache\apps.php
ecshop程序:
user.php
api\uc.php
includes\lib_common.php
includes\modules\integrates\ucenter.php
ecshop ucenter卸载
登录ecshop后台,“SQL查询”提交以下语句,清除缓存!
update ecs_shop_config set value='ecshop' where code='integrate_code';update ecs_shop_config set value='' where code='integrate_config';
这里的SQL将整合信息还原成默认的ecshop方式,然后清空整合数据。
注意:如果你的数据表前缀不是ecs_ 请自行修改
本文标签:
很赞哦! ()
相关文章
- ecshop会员登陆后可见价格,ecshop会员登陆后显示价格实例
- ecshop会员中心我的收藏的商品图片和时间怎么修改
- ecshop会员列表,ecshop会员资料使用说明
- ecshop在线调查,ecshop会员访问在线调查
- ecshop会员等级,ecshop会员注册等级
- ecshop会员价格登陆才显示和只显示和自己等级相符合的价格
- ecshop会员注册成功以后自动升级为对应会员等级实例教程
- ecshop会员注册订单分成推荐设置说明教程
- ecshop导出会员,ecshop会员批量导出邮箱教程
- ecshop会员登录赠送等级积分和消费积分插件
- ecshop会员注册登陆或指定会员等级才可以才能看到的内容
- ecshop会员注册自动发送邮件欢迎信息修改方法
随机图文
-
ecshop站点地图sitemaps.xml生成修改成功sitemap.xml方法
ECSHOP站点地图默认生成sitemaps.xml带s怎么修改成功sitemap.xml不带S呢?代码号就教大家怎么修改生成站点地图不带S -
ecshop客服管理不同会员二次开发方法
ecshop不同客服管理不同会员,这个看起来相当有必要,也相当实 用。我们很多人用ecshop做货源批发站。这个就牵涉到一个问题。如果不同的客服 -
ecshop商品详情页显示登录会员等级价格的修改方法
ecshop商品详情页显示登录会员等级价格简单修改教程,ecshop会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格。 -
ecshop首页热门搜索关键词怎么实现随机显示
1、打开 include/lib_main.php 文件,找到下面这段代码,删除之(大概在1652行左右)2 、打开 include/lib_insert.php 文件 ,在文件最下边加入下面这个函数
留言与评论 (共有 条评论) |