转载http://blog.csdn.net/squallleonheart/article/details/39555259

ecshop安装包:ECShop_V2.7.3_UTF8_release1106.rar
ucenter安装包:UCenter_1.6.0_SC_UTF8.zip
discuz!X安装包: discuz_X3.2_SC_UTF8.zip
mysql数据库管理工具:navicat
mysql是一个优秀的windows平台下的mysql数据库的图形界面管理工具,是本文的活跃主角.可惜注册费太贵.使用本工具需要开启mysql数
据库的远程连接功能.除非mysql数据库和navicat在同一台windows上.
为方便叙述,约定如下:
假定ecshop表前缀:ec_
假定ucenter表前缀:uc_
假定discuz表前缀:bbs_
本文名曰整合discuz论坛,其实是先要整合ucenter的.因为ecshop整合discuz程序上的一些问题,导致无法直接整合discuz.文章[1]说是因为UCenter 表前缀:不是UC_的.但是按照文章[1]整合后,会出现一些问题:
a.会员无法使用原来的密码正常登录;
b.即使能登录,在discuz里需要激活.
正因为有这些问题.所以有了本文.
实际应用背景:网站使用ecshop已经有一段时间,积累了一些用户,discuz是新装.希望把ecshop的用户导入discuz,并能实现同步登录.
整合步骤:
1.解压下载的ucenter安装包
服务器端在upload目录,改名为uc_server,客户端在advanced/uc_client里.借图.

2.安装ucenter服务器端
拷贝ucenter服务器端到ecshop根目录,ecshop/uc_server,访问url地址安装uc_server.
3.拷贝ucenter客户端
拷贝ucenter客户端到ecshop根目录,ecshop/uc_client,同时也替换掉discuzX3.2里的uc_client目录.因为discuz官方要求这样使用ucenter1.6版,避免遗留问题.该要求链接:http://www.discuz.net/thread-2151616-1-1.html
4.设置ucenter信息
ecshop里安装ucenter插件.只设置相关信息,不导入任何用户.借图.

 http://
在下图的地方点击"直接保存配置信息".如果你点了下一步用ecshop的程序导入了所有用户.你可能:
a.因为ecshop用户太多导致php程序执行超时,导入失败.
b.即使成功导入所有用户后,用户也无法使用原始密码登录,至于密码是什么,没有人知道,因为ecshop导入用户的时候算错了密码.

5.导出导入ecshop用户
使用navicat导出ecshop的用户表ec_users,导出以下字段的数据.导出成excel的xls文件users.XLS

user_name

password

reg_time

last_login

last_time

last_ip

ec_salt

salt

用excel手工新增一个字段groupid,设置值为10.discuz中是"新手上路"用户组.
再用excel手工新增一个字段timeoffset,设置为9999或8.discuz中,9999的时区是使用系统默认.8是东八区时间,即北京时间.
如果excel打开该文件时提示某些可能错误,则操作完成后需要另存一下同名文件.因为navicat导出xls文件有些问题,需要用excel另存一下正确的xls文件.
用navica将user.XLS文件导入ucenter的用户表uc_members.字段对应关系如下:

ucenter字段名

ecshop字段名

uid

user_id

username

user_name

password

password

email

email

regdate

reg_time

lastloginip

last_ip

lastlogintime

last_login

salt

ec_salt

只要ucenter的加盐字段salt和ecshop的ec_salt字段对应,password对应.则用户就可以使用以前的密码登录了.我没有见ecshop使用过salt字段进行加密,可能是预留的字段吧.
6.安装discuzX3.2
安装时不安装ucenter,只安装论坛部分.ucenter填写相应的信息.
补充:建议把discuz拷贝到的ecshop根目录下,并且使用同一个域名,不要给discuz使用其他域名,不然ucenter里经常通信失败.比如,ecshop在域名www.abc.com下,discuz在bbs.abc.com里,则由于未知的原因经常通信失败.我的做法是discuz位于www.abc.com/bbs下.
7.设置ucenter和discuzX3.2
登录discuz后台,在站长->ucenter设置,对以下两个选项,都设置为"是":

a.是否允许其他应用的会员在站点激活
  b.是否允许直接激活
登录ucenter的后台,在"应用管理"里,对与ecshop和discuz的两个应用,对于以下两个选项,都设置为"是":
  a.是否开启同步登录
  b.是否接受通知
8.导入discuzX3.2的用户表
此时discuz的管理员的user_id肯定在ecshop的所有用户之后.

其实这一步也可以不做.到目前为止,即使你第6步里的所有设置内容,ecshop的用户过来访问bbs,还是需要手工登录并手工激活的,只是不需要注册了.
为了解决这个烦人的问题,继续用前面的user.XLS文件,再用navicat导入discuzX3.2的用户表bbs_common_member.对应字段如下,groupid和timeoffset字段已经在第5步中增加过来了:

discuzX3.2的用户表字段

ecshop的用户表字段

uid

user_id

email

email

username

user_name

password

password

groupid

groupid

regdate

reg_time

timeoffset

timeoffset

9.导入用户其他信息

到此,正常登录已经没有问题了,对于心急的人来说,本小节可以略过.

首先把用户的qq,电话,地址等信息选择出来.联合查询sql语句如下:

  1. select u.user_id,ud.consignee,u.sex,u.msn,u.qq,u.office_phone,u.home_phone,u.mobile_phone,
  2. ud.zipcode,ud.tel,ud.mobile,
  3. u.email,ud.email,
  4. concat(pro.region_name,city.region_name,dis.region_name,ud.address) as final_address
  5. from ec_users u,ec_user_address ud,ec_region pro,ec_region city,ec_region dis
  6. where u.user_id=ud.user_id
  7. and
  8. (
  9. ud.province=pro.region_id and
  10. ud.city=city.region_id and
  11. ud.district=dis.region_id
  12. )

用navicat导出这些字段,另存为excel文件,user_data.XLS

注意上面的SQL语句并没有执行外连接查询,如果联系人地址里有不对应的记录,则选不出来.比如城市的代码为0.导出后注意一下记录总数与ec_users表的记录总数是否一致.

我之所以导出了很多电话号码,是因为ec_users表的电话号码与收货人地址ec_user_address的联系电话不一定一致,这个就需要导出来以后人工判断一下了.提供给discuzX3.2两种电话格式即可,一种是固定电话,一种是手机.

然后导入discuzX3.2的用户个人配置表bbs_common_member_profile,注意如果表中有记录先truncate table bbs_common_member_profile.然后再导入,对应字段如下:

discuzX3.2用户配置表 ecshop用户信息
uid user_id
realname consignee
gender sex
telphone 人工判断的固定电话
mobile 人工判断的手机
address final_address
zipcode zipcode

10.总结

到此,对于ecshop中已经存在的用户终于可以实现在ecshop和discuz这两个应用中,任何一个应用登录,在其他地方都可以自动登录了.但还存在以下问题:

a.ecshop新注册用户,在访问discuz时仍然需要登录激活;

b.ecshop已存在用户的电话,qq号等信息还未迁移过来,在bbs_member_profile表里对应(已解决,见第9节);

c.ecshop里用户的信息和discuz里的用户信息如何在修改时同步到对方应用.

因为对于开发人员来说,肯定不希望有意识的认识到网站商城和论坛是两套不同的应用,而是希望认为他们是一体的.所以本方案称为97%的完美解决方案.有的问题需要全面考察两个应用的设计思路后,才可能给出完美的解决办法或者代码.这就等待后人给我们继续努力啦.

参考文章:

1.xaijl 的《ecshop整合discuz教程 (100%成功率)》,链接:http://bbs.ecshop.com/thread-173080-1-1.html

深入理解ecshop2.7.3整合discuzX3.2(97%的完美方案)的更多相关文章

  1. [转][c++11]我理解的右值引用、移动语义和完美转发

    c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能.有点难理解,于是花时间整理一下自己的理解. 左值.右值 C++中所有的值都必然属于左值.右值二者之一.左值是指表达式结束后依然存在的 ...

  2. 深入源码理解Spring整合MyBatis原理

    写在前面 聊一聊MyBatis的核心概念.Spring相关的核心内容,主要结合源码理解Spring是如何整合MyBatis的.(结合右侧目录了解吧) MyBatis相关核心概念粗略回顾 SqlSess ...

  3. SpringMVC整合FreeMarker实例

    FreeMarker作为模板引擎,是比较常用的. FreeMarker官方文档地址为:https://freemarker.apache.org/ 现在浏览器或者翻译工具这么多,对于英文方面,我想大多 ...

  4. SpringBoot第二十一篇:整合ActiveMQ

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11190048.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   前一章节中 ...

  5. Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache

    用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...

  6. 另一种缓存,Spring Boot 整合 Ehcache

    用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...

  7. ecshop整合discuz教程完美教程

    所需软件: ecshop安装包:    ECShop_V2.7.3_UTF8_release1106.rarucenter安装包:   UCenter_1.6.0_SC_UTF8.zipdiscuz! ...

  8. 整合SSM框架

    整合SSM 基本环境搭建 导入相关的pom依赖! <dependencies> <!--Junit--> <dependency> <groupId>j ...

  9. 07-Spring整合Mybatis

    Spring之整合Mybatis 整合核心思路 由很多框架都需要和Spring进行整合,而整合的核心思想就是把其他框架所产生的对象放到Spring容器中,让其成为Bean. 比如Mybatis,Myb ...

随机推荐

  1. 在input中实现点点点与当鼠标移上去时显示剩余的字

    项目中经常会遇到这个问题,在一个内容框中,由于框的宽度是固定的,但是里面的内容却有很多,那么这个时候需求里就要求第一,多余的字要以点点点的形式隐藏,第二,当鼠标移上去的时候要以title提示的方式显示 ...

  2. java selenium (五) 元素定位大全

    页面元素定位是自动化中最重要的事情, selenium Webdriver 提供了很多种元素定位的方法.  测试人员应该熟练掌握各种定位方法. 使用最简单,最稳定的定位方法. 阅读目录 自动化测试步骤 ...

  3. YII2 缩略图生成 第三方包修改

    "xj/yii2-thumb-action": "^2.0" 原本的上传路径是全路径 根据日期生成的上传文件夹 不适用 比如 : upload\article\ ...

  4. Spring 通过配置文件注入 properties文件

    当我们需要将某些值放入 properties文件 key=value 的方式,获取文件信息使用spring 注入的方式会变得很便捷 1. spring 配置文件需要导入 <?xml versio ...

  5. Hibernate1

    计应134(实验班) 杨伟 Hibernate的核心接口一共有6个,分别为:Session.SessionFactory.Transaction.Query.Criteria和Configuratio ...

  6. C#如何获取项目中的其他文件夹的路径

    //一般用string p=AppDomain.CurrentDomain.BaseDirectory+"\\其他"; //其它的还有 string str1 =Process.G ...

  7. hibernate的1+n

    对数据库访问还是必须考虑性能问题的, 在设定了1 对多这种关系之后, 查询就会出现传说中的n +1 问题. 1 )1 对多,在1 方,查找得到了n 个对象, 那么又需要将n 个对象关联的集合取出,于是 ...

  8. sysctl.conf网络内核参数说明(转)

    下面是我的理解,可能有误,仅供参考. 要调优,三次/四次握手必须烂熟于心. client                  server(SYN_SENT)      —>  (SYN_RECV ...

  9. sigaction和sigqueue

    sigaction函数相对于siganl函数控制信号的发送要更加精确一些,其函数原型为: int sigaction(int signum, const struct sigaction *act, ...

  10. 关闭键盘导致tableView:didSelectRowAtIndexPath:失效解决办法

    今天公司的小兄弟问了tableView:didSelectRowAtIndexPath:不能执行的问题. 从经验看觉得可能是控制器没有成为tableView的代理所致.但代码中已经添加了代码 _tab ...