深入理解ecshop2.7.3整合discuzX3.2(97%的完美方案)
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 |
|
|
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 |
|
|
username |
user_name |
password |
password |
groupid |
groupid |
regdate |
reg_time |
timeoffset |
timeoffset |
9.导入用户其他信息
到此,正常登录已经没有问题了,对于心急的人来说,本小节可以略过.
首先把用户的qq,电话,地址等信息选择出来.联合查询sql语句如下:
- select u.user_id,ud.consignee,u.sex,u.msn,u.qq,u.office_phone,u.home_phone,u.mobile_phone,
- ud.zipcode,ud.tel,ud.mobile,
- u.email,ud.email,
- concat(pro.region_name,city.region_name,dis.region_name,ud.address) as final_address
- from ec_users u,ec_user_address ud,ec_region pro,ec_region city,ec_region dis
- where u.user_id=ud.user_id
- and
- (
- ud.province=pro.region_id and
- ud.city=city.region_id and
- ud.district=dis.region_id
- )
用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%的完美方案)的更多相关文章
- [转][c++11]我理解的右值引用、移动语义和完美转发
c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能.有点难理解,于是花时间整理一下自己的理解. 左值.右值 C++中所有的值都必然属于左值.右值二者之一.左值是指表达式结束后依然存在的 ...
- 深入源码理解Spring整合MyBatis原理
写在前面 聊一聊MyBatis的核心概念.Spring相关的核心内容,主要结合源码理解Spring是如何整合MyBatis的.(结合右侧目录了解吧) MyBatis相关核心概念粗略回顾 SqlSess ...
- SpringMVC整合FreeMarker实例
FreeMarker作为模板引擎,是比较常用的. FreeMarker官方文档地址为:https://freemarker.apache.org/ 现在浏览器或者翻译工具这么多,对于英文方面,我想大多 ...
- SpringBoot第二十一篇:整合ActiveMQ
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11190048.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 前一章节中 ...
- Spring Boot2 系列教程(三十)Spring Boot 整合 Ehcache
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...
- 另一种缓存,Spring Boot 整合 Ehcache
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场 ...
- ecshop整合discuz教程完美教程
所需软件: ecshop安装包: ECShop_V2.7.3_UTF8_release1106.rarucenter安装包: UCenter_1.6.0_SC_UTF8.zipdiscuz! ...
- 整合SSM框架
整合SSM 基本环境搭建 导入相关的pom依赖! <dependencies> <!--Junit--> <dependency> <groupId>j ...
- 07-Spring整合Mybatis
Spring之整合Mybatis 整合核心思路 由很多框架都需要和Spring进行整合,而整合的核心思想就是把其他框架所产生的对象放到Spring容器中,让其成为Bean. 比如Mybatis,Myb ...
随机推荐
- SQL 子查询,连接查询复习
use lianxi0720 go --创建部门表 create table bumen ( bcode int primary key,--部门编号 bname ), --部门名称 bceo ), ...
- Xcode模拟器不显示SDK版本,反而显示设备ID的解决办法
今天在应用程序中修改了Xcode app 的名称,结果导致Xcode模拟器不显示SDK版本,反而显示设备ID了,感觉特别的忧伤......如图: 进到Xcode->window->Devi ...
- [转载]ASP.NET中TextBox控件设立ReadOnly="true"后台取不到值
原文地址:http://www.cnblogs.com/yxyht/archive/2013/03/02/2939883.html ASP.NET中TextBox控件设置ReadOnly=" ...
- 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 ...
- function,new function,Function,new Function 之间的区别
测试一: var fud01 = function() { var temp = 100; this.temp = 200; return temp + this.temp; } alert(typ ...
- Jenkins构建时报错:No Space left on device
Jenkins在自动化构建服务的同时也在消耗服务器的磁盘空间,如果构建的项目个数很多,而Jenkins 服务器磁盘空间又不是非常大的话,每隔一段时间磁盘空间就会爆满导致,就会出现磁盘空间不足无法构建的 ...
- python 打印 网格
#/usr/bin/python # -*- coding:utf-8 -*- # width 单个网格有多少个 - 宽度# height 单个网格有多少个 | 高度# lateral 横向有多少个网 ...
- apache中虚拟主机的配置
一.两种方式:基于域名的虚拟主机和基于IP地址的的虚拟主机 (这里基于前者) 二.作用:实现在同一个web服务器下,同时运行很多个站点(项目) 三.虚拟主机的配置 1.在核心配置文件中加载虚拟主机配置 ...
- 用PowerMock mock static方法
在编写代码时,经常需要调用别人已经写好的工具类,而这些工具提供的方法经常是static方法,在这里,直接贴出<PowerMock实战手册>中的例子 待测试方法: public class ...
- druid.properties的配置
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://NoOne:3306/eyes<!--需修改--> username=root ...