转载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. Python面向对象高级之类的特殊成员

    上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段.方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用.无论人或事物往往都有不按套路出 ...

  2. Windows Store App 全球化:应用中设置语言选项

    当开发者将开发的应用上传到Windows应用商店以后,使用Windows 8系统的用户可能会看到并下载这些应用,而这些用户所在的区域或者所使用的语言可能都不相同,如果他们在使用应用程序时希望改变应用显 ...

  3. EntityFramework CodeFirst SQLServer转Oracle踩坑笔记

    接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...

  4. java 字符串转成 json 数组并且遍历

    当需要把一串字符串转成一个json 数组 ,并遍历其中的内容时. 首先要导入 net.sf.json.JSONArray和net.sf.json.JSONObject 两个jar 包 String s ...

  5. Whole life

    Whole life the wonder such you bring the beautyI can see but i keep deep inside on itOh life i feel ...

  6. gdb调试报错记录

    警告信息: incompatible implicit declaration of built-in function ‘strlen’ [enabled by default] 原因:未添加< ...

  7. 写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”)

    public class Test { public void index() { String strWords = "Hello World My First Unit Test&quo ...

  8. 【转】 Easy RadControl 之 RadGridView(Silverlight)

    1.不显示第1列即列指示器(Row Indicators) 在 telerik:RadGridView中设置属性   RowIndicatorVisibility="Collapsed&qu ...

  9. JAVA第三周作业(从键盘输入若干数求和)

    JAVA第三周作业(从键盘输入若干数求和) 在新的一周,我学习了JAVA的IO编程.下面的代码实现了从键盘输入若干数求和的目标.import java.util.Scanner; public cla ...

  10. C#中DateTime.Now.ToString()

    项目开发中遇到一个问题:C#编写的SQL语句中有时间值,刚开始直接将DateTime.Now进行toString()处理,源代码调试程序运行正常. 然后我的电脑重装了系统,再次运行程序就报错“从字符串 ...