转载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. SQL 子查询,连接查询复习

    use lianxi0720 go --创建部门表 create table bumen ( bcode int primary key,--部门编号 bname ), --部门名称 bceo ), ...

  2. Xcode模拟器不显示SDK版本,反而显示设备ID的解决办法

    今天在应用程序中修改了Xcode app 的名称,结果导致Xcode模拟器不显示SDK版本,反而显示设备ID了,感觉特别的忧伤......如图: 进到Xcode->window->Devi ...

  3. [转载]ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值

    原文地址:http://www.cnblogs.com/yxyht/archive/2013/03/02/2939883.html ASP.NET中TextBox控件设置ReadOnly=" ...

  4. how to get soul shields in blade and soul

    These soul shields can either be obtained by E.Fleet Supply Chain or Blackram Supply Chain (4-man or ...

  5. function,new function,Function,new Function 之间的区别

    测试一: var fud01 = function()  { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typ ...

  6. Jenkins构建时报错:No Space left on device

    Jenkins在自动化构建服务的同时也在消耗服务器的磁盘空间,如果构建的项目个数很多,而Jenkins 服务器磁盘空间又不是非常大的话,每隔一段时间磁盘空间就会爆满导致,就会出现磁盘空间不足无法构建的 ...

  7. python 打印 网格

    #/usr/bin/python # -*- coding:utf-8 -*- # width 单个网格有多少个 - 宽度# height 单个网格有多少个 | 高度# lateral 横向有多少个网 ...

  8. apache中虚拟主机的配置

    一.两种方式:基于域名的虚拟主机和基于IP地址的的虚拟主机 (这里基于前者) 二.作用:实现在同一个web服务器下,同时运行很多个站点(项目) 三.虚拟主机的配置 1.在核心配置文件中加载虚拟主机配置 ...

  9. 用PowerMock mock static方法

    在编写代码时,经常需要调用别人已经写好的工具类,而这些工具提供的方法经常是static方法,在这里,直接贴出<PowerMock实战手册>中的例子 待测试方法: public class ...

  10. druid.properties的配置

    driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://NoOne:3306/eyes<!--需修改--> username=root ...