ecshop整合discuz教程和discuz的用户体系如何统一?

专注于网络服务十年
ecshop的功能无疑是强大的,官方技术开发小组把用户所想到的和没想到的都预想给你提前预制好了,如果你的网店还需要论坛支持,想要实现论坛网店一个帐号登录,那么就用网店管理后台的&会员整合&功能,将Ecshop网店和Discuz!论坛系统进行整合,化整为零,实现一个帐号登录多个系统。NH主机【】已经在公司的php虚拟主机上成功将ecshop和discuz!通过ucenter进行整合,下面是详细的整合过程。&教程目录:1、& 系统整合前的准备2、& 三个版本的安装3、& 整合的过程本教程关键词:整合教程目录:通过ucenter系统将ecshop和discuz!整合,在ecshop网店上申请注册的会员,无需在discuz论坛注册就可以直接登录,实现一个会员帐号同时登录ecshop网店购物和diszuz!论坛发帖。一、Ecshop整合discuz!论坛前的准备工作:请用户自行到官方网站下载ECShop_V2.7.2_GBK_Release0604、 Discuz_7.2_SC_GBK、 UCenter_1.5.2_SC_GBK三个系统,请确保版本编码统一,否则在整合过程中会报错。本教程演示中是将ecshop网店为默认网站,安装在php空间的网站根目录下面,UCenter_1.5.2_SC_GBK安装在二级别目录ucenter下面,Discuz_7.2_SC_GBK安装在二级目录dzbbs目录下面。其网站访问方式如下:Ecshop网店为主站:http://.UCenter 为二级目录访问方式:http://./ucenterDiscuz!为二级目录访问方式:http://./dzbbs二、系统的安装:请按照深入详解NH主机php空间如何上传网站数据中介绍的方法,快速将安装包上传到ftp并在线解压缩,然后分别开始安装,请按照装如下顺序安装:1、& 安装ecshop网店系统到网站根目录(public_html),安装方法用户可以点击php开源网店系统Ecshop安装图文教程查看。2、& 安装ucenter系统到二级别目录(ucenter),安装方法用户可以到NH主机环境下快速安装ucenter的方法了解3、& 安装Discuz!论坛到二级目录(dzbbs)。特别说明:NH主机&香港/美国 php虚拟主机都支持一个mysql,用户在安装三个系统的时候,请使用一个mysql数据库,保持数据库表前缀不同就可以了,不会影响使用。安装时候使用同一个mysq数据库名称、数据库访问用户和访问密码。三、使用Ucenter开始整合Ecshop和discuz!1、&&& 首先将ucenter安装包里面的advanced/ uc_client文件件上传到ecshop网站根目录即public_html目录下面,并设置uc_client目录有写入权限为。使用NH主机空间的站长可以忽略权限问题。2、&&& 登录ecshop管理后台,现在&会员管理&下面&整合会员&,找到ucenter进行安装(如图1),然后输入ucenter的URL访问地址(http://./ucenter)和ucenter创始人管理密码(见图2),既可以开始整合(见图3)。输入ucenter访问地址和创始人管理密码点击&开始导入&,示ecshop会员数量等待一会儿,就可以完成整合。3、& 登录ucenter管理后台,选择&应用管理&看到两个显示2个系统已经通信成功。现在就去ecshop网店注册一个会员后,不仅可以登录ecshop网店还可以登录dz论坛了。编外话:ecshop不仅仅可以整合discuz!论坛还可以整合PHPWind 、phpBB、 vBulletin系统,整合功能异常强大,用户可以根据自己需要,选择对应的接口进行整合。感谢你使用NH主机300M香港php虚拟主机,只需要99块就可以在线开店当老板。
添加新评论ecshop&与&discuz!&的同步问题
前段时间将ec与discuz会员整合在了一起,实现了同步登录与同步退出!
其实无论什么网站与康盛的产品整合,都必须在ucenter的基础之上,所以呢,要先安装ucenter,接着安装需要整合的网站!
1、discuz的安装必须在ucenter的基础上,而且还必须有数据库密码!所以要注意这点!
2、ecshop的安装有两种,可以通过ucenter应用管理来安装,还可以直接安装!
3、如果通过ucenter安装的ec,打开UCenter管理页面,管理应用 -&应用列表 就可以 看到
ecshop 的记录了,如果通信失败,首先 可以 点击下 应用的主 url 那个地址,如果不能访问到 ecshop
站点的话,那么这个路径写错了,&其他的问题也不大,路径后边不要加
/& 。为了跟保险可以将 应用的 UCenter 配置信息 复制 到 ecshop 站点下的
config.php中,将原值覆盖。(discuz也是如此);
4、 如果没有通过ucenter安装ec,那么就要去ec后台会员管理模块那里有会员整合功能,点击与ucenter整合,默认情况下
ECShop_V2.7.2_UTF8_Release0604 这版本是 没有 uc_client
这个目录的,需要从discuz下复制一份 出来 放到 EC 的 根目录下。(不要从 UCenter 复制 uc_client ),打开
ECShop 后台会员管理-& 会员整合 安装 UCenter ,安装完成后 点 设置, 主要
把UCenter 通信密钥写成 安装 EC 应用时候的密钥(第三步操作时写的密钥),将
UCenter& 的数据库信息写正确,也就是安装 UCenter&
时候填写的那些。其他的就让他默认吧。配置完这些后,在到 UCenter 的 管理应用中看看, 如果还是通信失败,点击 编辑 将
页面最下边的代码复制到 EC 的根目录下的data 目录下的config.php 中 即可。
安装完毕,现在开始测试
a: 用户在 EC 中登录,在supesite
中刷新也能登录,在supesite中退出,EC中 不能 退出
打开EC根目录下的 api 目录下的 uc.php&,在uc.php中 找到 set_cookie
它是 判断 user_id 这个参数,如果是空的 就销毁 cookie,否则 设置cookie 但是发现 设置 cookie
的时候 是:
setcookie("ECS[username]", $user_name, $time,
$GLOBALS['cookie_path'],& 是有四个参数,设置了 cookie
的路径,可是销毁 cookie 的时候 是 没有 加 路径的 ,所以退出的时候 是没有&销毁
cookie 的,
需要加上 $GLOBALS['cookie_path'],作为 第四个参数。
b:在 discuz中新注册用户,注册完成后 自动就是在登录状态,在EC
中 怎么刷新 也不能登录, 需要 也在 EC 中登录 一次后才可以 实现
discuz中 注册请求 发送到 根目录下的 do.php ,根据 action 参数 判断 从而引入不同的文件
array('register', 'seccode', 'lostpasswd', 'click'),注册时
action=register&&所以引入了 根目录下 的
source 目录下 的 do_register.php ,$op = $_GET['op'] ? trim($_GET['op'])
这时候的&$op&是空的 所以 程序走的是
if(empty($op)) { ......} 这个 if 块,在这个if 块中 找到 $newuid =
uc_user_register($username, $password, $email);&
$newuid 可能 是 &-1 : 用户名不合法,-2 : 包含不允许注册的词语,-3 :
用户名已经存在,-4 : email 格式有误,-5 : email 不允许注册,-6 : 该 email
已经被注册,&1 : 表示成功,数值为 UID ,如果 newuid 大于 1 那么在 UCenter
的用户表中 已经插入了记录,此时的uid
正是&$newuid,&那么需要做的是
将数据同步到本地数据库中(也就是说 将记录插入到 discuz 的用户表中),再 设置 cookie ,将 新用户
显示登录状态,在设置 cookie 之前 数据 已经同步到了 EC
的&用户表了,
其中少了一步 就是 调用&EC 站点下的 uc.php&设置
cookie,调用方法 就是 用&javascript 调用 php ,也就是说
静态页面调用php,用 uc_client目录下的 client.php 中的 uc_user_synlogin() 方法 可以获取
生成好的 javascript 的代码,&格式如下:
&script type="text/javascript"
src="/api/uc.php?time=&code=39a6D4fI35FUB8H/z8qA5jLRTY1woFuLB5VNuheOib07o3kTDYLHb0QtnEIAvF8jk+a0h16lmu6k+syD6LcpgSxWepHGw3QTfmew0X4FiAlAcy7J7R2hBJ8SO7zz/Yux5GOpTFhNCubvPW9p1pCAFnVxhlN7A282aj4z"
reload="1"&&/script&
有多少个站点 要同步就会生成出
几个 这样的
代码,将这样的代码放到页面中直接就能请求&&&,先说这么多,接下来
其实要做的是 ,在 更新本地数据库之后,设置 cookie 之后,在 调用 showmessage() 这个方法之前 加 入 以下
代码:$uc = uc_user_synlogin($newuid); 将 showmessage() 这个方法的 第一参数 改成 '
'.$uc& 即:showmessage(' '.$uc,
rawurldecode($refer));&&这个方法的第一参数是不能是中文的,否则会报XML解析错误,所以只能用空来代替了。这样就好了,测试下&在
discuz中注册的用户 在EC中能直接登录吧!
c: 同样 在EC中注册用户,注册完成后自动就是在登录
状态,在discuz中 怎么刷新 也不能登录, 需要 也在 discuz中登录一次后才可以
首先 在 EC 的站点下 user.php 找到 if(register($username, $password,
$email, $other) !==false) 这个判断(大约在140 行左右)。将 register($username,
$password, $email, $other) 拿出去 即:
&$uid = register($username, $password, $email,
&&if ($uid !== false)
再找到 EC 更目录 下的 includes 下的 lib_passport.php 中的 register() 方法,找到
if (!$GLOBALS['user']-&add_user($username,
$password, $email)) 这个判断,同样 把
$GLOBALS['user']-&add_user($username, $password,
$email) 拿出去,写成:
$uid = $GLOBALS['user']-&add_user($username,
$password, $email);
&if (!$uid) 接着 在 这个方法的 结尾处找到 else 块中的
就是调用 recalculate_price(); 这个方法 之后的&
改成 return $
在 EC根目录下 的 includes 下的 modules 下的 integrates 下的
ucenter.php& 中的 add_user() 这个方法,在这个方法的结尾 也是 else
$this-&db-&query()
在调用这个方法之后,加以下代码:
$this-&ucdata =&
uc_call("uc_user_synlogin",array($uid));
同样 将 改成 return $& 接着在回到
user.php 的注册会员那块 在 if ($uid !== false) 这个判断的最后 调用 show_message()
方法之前 加入 $ucdata = empty($user-&ucdata)? "" :
$user-& 如果有的话就不用加了。将 show_message() 的第一参数改成
sprintf($_LANG['register_success'], $username . $ucdata) 即:
show_message(sprintf($_LANG['register_success'], $username .
$ucdata), array($_LANG['back_up_page'], $_LANG['profile_lnk']),
array($back_act, 'user.php'), 'info');
做完这些操作之后 EC 方面是没什么问题了,这些完成之后测试的时候却不行。 原因很简单,EC 注册会员的时候 只在
ucenter 的表中 和 自己的表中 插入了 相关记录,discuz中却没有。那么 打开 discuz根目录下的 api 下的
uc.php 看看原因吧。当请求 发送到 discuz下的 uc.php 的的时候 将参数
code 解密 $code = @$_GET['code']; parse_str(authcode($code,
'DECODE', UC_KEY), $get); 将值赋给 $get,根据 $get['action']
得到要调用的方法即:$uc_note = new uc_note(); echo
$uc_note-&$get['action']($get, $post); (从 EC
发出的请求&$get['action'] 是 synlogin , 因为刚才 在 EC 的
ucenter.php&的 add_user()&方法中 加入了
$this-&ucdata =&
uc_call("uc_user_synlogin",array($uid));)接着 调用
synlogin()&方法。找到synlogin()&这个方法 在
if($member = $_SGLOBAL['db'] -& fetch_array($query))
判断的else 块中 ssetcookie('cookietime', $cookietime,
);& 设置cookie 之前 加入 以下代码:
$setarr = array(
=& $get['uid'],
&&&&'username'
=& $get['username'],
&&&&'password'
=& $get['password'] //本地密码随机生成
&&&inserttable('members',
$setarr, 0, true);
&&&&ssetcookie('sid',
'', 86400 * 365);
&&&ssetcookie('cookietime',
$cookietime, );
&&&ssetcookie('auth',
authcode("$get[password]\t$get[uid]", 'ENCODE'),
$cookietime);&&
将这个重复的删了吧。。ssetcookie('cookietime', $cookietime,
);& 在 uc.php
开始就引入了include_once(S_ROOT.'./function/common.func.php');
所以不用担心上边的
inserttable() 方法 未定义。。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。为了适应wordpress最新的版本,本站模板已更新
> ECshop调用discuz帖子的方法
要保证bbs的表和我们ECshop的表在一个库的情况下:
在相应的php文件里插入
$subject_list = $db-&getAll(“select tid,subject,dateline from cdb_post where fid=54 limit 0,10”);
foreach($subject_list as $idx=&$value)
$subject_list[$idx][‘subject’] = sub_str($value[‘subject’],8);//字符串截取
$subject_list[$idx][‘dateline’] = date($GLOBALS[‘_CFG’][‘date_format’], $value[‘dateline’]);//格式化时间
$smarty-&assign(‘subject_list’,$subject_list);
在ecshop模版加入
{$list.subject}{$list.dateline}
转载请注明: &
or分享 (0)

我要回帖

更多关于 ecshop整合discuz同步 的文章

 

随机推荐