Ucenter整合CMS和discuz教程
笔记 by ecms 2016-08-12 09:07:26 笔记   

帝国CMS整合Discuz有两种方式:
方式一、用Ucenter接口整合。使用Ucenter接口整合无需安装通行证跟万能会员接口。
方式二、用Discuz通行证接口整合。需先安装万能会员接口,然后再安装通行证。

Ucenter接口及Discuz通行证下载地址:http://www.phome.net/OpenSource/

以下笔记为Ucenter接口整合步骤:

 

第 1 步:上传整合接口
将接口包的“upload”目录里的文件夹及文件上传至帝国CMS的“e”目录里(注意是上传 upload 目录中的文件和目录,而不是上传 upload 目录本身)。

1.jpg

 

复制到帝国CMS的“e”目录里:

 

2.jpg

 

第 2 步:在Ucenter后台增加帝国CMS应用
登陆Ucenter后台 > 点击“应用管理” > 点击“添加新应用”:

3.jpg

 

点击添加新应用进入添加应用页面:

4.jpg

安装方式:选择自定义安装。
接口URL: 填帝国CMS的“e”目录地址,如:“http://域名/e”。
通信密钥: 任意的字符,由英文字母及数字组成。尽量长点。 (不填写也可以提交,系统会自动生成)
应用类型: 选择其他。
是否开启同步登录: 选择是。
是否接受通知: 选择是。

设置参数后点击提交,然后返回应用列表就可以看到我们刚才增加的应用:

5.jpg

 

第 3 步:配置Ucenter整合接口的配置参数文件e/config.inc.php
修改帝国CMS目录下的e/config.inc.php文件配置:(UTF-8版要用dreamweaver或editplus修改,用记事本会将文件转为gbk)

6.jpg

连接UCenter的方式
UC_CONNECT:默认为mysql,一般不用修改。如果设置mysql链接方式,Ucenter的数据库帐号必须有权限操作帝国CMS的数据库。

UCenter数据库参数配置(如果不清楚 可对比ucenter的配置文件) /e/bbs/config/config_ucenter.php,密钥要看一下通信里面的密钥
UC_DBHOST: UCenter 数据库主机
UC_DBUSER: UCenter 数据库用户名
UC_DBPW: UCenter 数据库密码
UC_DBNAME: UCenter 数据库名称
UC_DBCHARSET: UCenter 数据库字符集,默认即可
UC_DBTABLEPRE: UCenter 数据库表前缀(格式:数据库.前缀,如:database.uc_),一定要记得加数据库

UCenter通信相关参数(要同Ucenter增加的帝国CMS应用设置项保持一致。)
UC_KEY: 通信密钥,打开ucenter 把帝国CMS应用里的通信密钥和此密钥统一。
UC_API: 设置Ucenter的安装地址,如:http://www.phome.net/ucenter
UC_CHARSET: UCenter 的字符集,默认即可
UC_IP: UCenter 的 IP,默认即可
UC_APPID: 当前应用的ID,打开ucenter 看应用管理中帝国CMS接口前的id数字。

同步登录Cookie设置
一般不用设置,默认即可。

7.jpg

如果原帝国CMS有会员数据,则可以按下面步骤将会员导入Ucenter:
第 4 步:将帝国CMS会员导入Ucenter 说明:
(1)、如果你的帝国CMS使用了万能会员接口整合了其他程序,即整合其它会员系统,可跳过此步骤。
(2)、如果本身没有会员数据也可跳过此步骤。

导入步骤:
(1)、将接口包的“tool”目录里的update文件夹复制到帝国CMS的“e”目录里;
(2)、运行e/update/index.php文件,进行会员数据导入操作;
//应该 是/e/tool/update/index.php,然后官方提供的index.php有两处修改

(3)、导入完毕后,将e/update目录里的文件删除。

第 5 步:清空帝国CMS会员表(phome_enewsmember)数据,以免同Ucenter数据冲突
如果本身没有会员数据可跳过此步骤。

登陆帝国CMS后台 > “系统设置” > “执行SQL语句”,运行下面SQL:
TRUNCATE `[!db.pre!]enewsmember`;
TRUNCATE `[!db.pre!]enewsmemberadd`;

至此,Ucenter接口整合完毕。


其他说明:
1、如果网站会员不是在帝国系统注册并且没有在帝国登陆过,那么需要登陆一次帝国,以激活帐号,以后则是同步登陆。
2、如果以前整合过DISCUZ通行证,那么需要还原DISCUZ的logging.php与register.php为原版文件。

PHP Code复制内容到剪贴板
  1. include("../../config/config.php");  
  2. include("../../config.inc.php");  

 


 

在帝国中帐号登陆与退出,DZ可以同步,但如果在DZ中登陆注册,帝国则同步不了

解决Discuz X整合其他系统后同步问题

有很多程序整合discuz后,UC中显示通信成功,在整合端登陆注销,DX也会跟随同步登陆注销
但是反过来在DX中登陆注销,整合端反而不会跟随同步登陆注销。实在是很恶心!!!
后查询发现,原来是dx登陆注册的时候没有返回给UC状态。
所以暂时解决方案如下:
DX的client.php文件中(默认在uc_client目录下):
找到310行左右

PHP Code复制内容到剪贴板
  1. function uc_user_synlogin($uid) {  
  2.         $uid = intval($uid);  
  3.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  4.                 if(count($_CACHE['apps']) > 1) {  
  5.                         $return = uc_api_post('user''synlogin'array('uid'=>$uid));  
  6.                 } else {  
  7.                         $return = '';  
  8.                 }  
  9.         }  
  10.         return $return;  
  11. }  
  12.    
  13. function uc_user_synlogout() {  
  14.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  15.                 if(count($_CACHE['apps']) > 1) {  
  16.                         $return = uc_api_post('user''synlogout'array());  
  17.                 } else {  
  18.                         $return = '';  
  19.                 }  
  20.         }  
  21.         return $return;  
  22. }  

 

修改为:


PHP Code复制内容到剪贴板
  1. function uc_user_synlogin($uid) {  
  2.         $uid = intval($uid);  
  3.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  4.                 if(count($_CACHE['apps']) > 1) {  
  5.                         $return = uc_api_post('user''synlogin'array('uid'=>$uid));  
  6.                 } else {  
  7.                         $return = uc_api_post('user''synlogin'array('uid'=>$uid));  
  8.                 }  
  9.         }  
  10.         return $return;  
  11. }  
  12.    
  13. function uc_user_synlogout() {  
  14.         if(@include UC_ROOT.'./data/cache/apps.php') {  
  15.                 if(count($_CACHE['apps']) > 1) {  
  16.                         $return = uc_api_post('user''synlogout'array());  
  17.                 } else {  
  18.                         $return = uc_api_post('user''synlogout'array());  
  19.                 }  
  20.         }  
  21.         return $return;  
  22. }  

这样即可实现双向同步登陆注销了。具体有什么后遗症没具体测试,有心的同学可以测试测试。

 


 

修改头部的Power by Discuz 名称:/Template/default/common/header.htm 去掉后面跟着的几个字
3.2的在header_common.htm

 

宽窄屏设置:

8.png

 

修改论坛title:界面—SEO设置—论坛—

9.png

这里改掉就可以了

去掉底部链接:进入后台—界面—界面设置—论坛首页—第三个显示友情链接,点否就可以了
全局-注册与访问控制-可设置为人工审核新会员

 

pre_forum_thread 调用论坛的贴子表名 一般可以调用标题 时间
pre_forum_forum 调用论坛的版块表名 一般可以调用版块名
pre_forum_thread 数据库名称

 

论坛设置用户可以上传视频
在论坛-版块管理-编辑-贴子选项-允许使用多媒体代码

 


 

DZ安装好登录ucenter出现无法登录,用户名和密码无误,无法登录ucenter

升级20141225版本出现UC无法登录问题【完美】修复方法。
升级20141225版本后,出现UC无法登录问题【完美】解决方法。
自圣诞节发布 Discuz! X3.2 R20141225 小编手头多个站点也都在升级后出现了,后台登录【 UCenter】假死情况,在密码账号及验证码输入正确情况下均不能正常登录。这时候或许你遇到的也跟小编一样情况,那就请详细阅读下面教程。
完美解决方法:
方法2:
1、在站点根目录下找到: uc_server/model/admin.php
2、打开 admin.php 文件进行编辑,搜索找到这行代码:(如果你这文件没改动过的话默认位置是在 22 行。)

$this->cookie_status = 0;

3、把搜索到的这行代码修改为:

$this->cookie_status = isset($_COOKIE['sid']) ? 1 : 0;


按照以上三步操作就可以解决【 UCenter】不能登录的问题。

 


 

该用户未在本站激活,请重新登陆以激活帐号

整合UCenter后,所有ECMS未登录用户的提示都变成了“该用户未在本站激活,请重新登陆以激活帐号”,这个也是个BUG吧,至少“登陆”的“陆”字写错了,其它地方都是“登录”。

e\member\class\user.php文件中的的islogin函数先判断有没有激活,再判断有没有登录,是不是判断顺序搞反了?应该先判断有没有登录才对吧。

PHP Code复制内容到剪贴板
  1. // 省略……  
  2. $userid=(int)getcvar('mluserid');  
  3. // 省略……  
  4. if(getcvar('mldoactive')==$userid)  
  5. {  
  6.         // 省略……  
  7.         printerror('该用户未在本站激活,请重新登录以激活帐号',$gotourl,1,0,1);  
  8. }  
  9. // 紧接着判断有没有登录  

 

这段代码在未登录时getcvar('mldoactive')和$userid是永远相等的呀,所以会一直提示激活,解决方法要么把判断登录的代码移到判断激活的代码前面,要么把

PHP Code复制内容到剪贴板
  1. if(getcvar('mldoactive')==$userid)   
  2. 改为:  
  3. if($userid && getcvar('mldoactive')==$userid)  

 

整合UCenter后,UCenter数据表 uc_protectedmembers 中的存在用户将无法在ECMS的前台正常修改密码,虽然ECMS提示修改成功,但是实际上只修改成功了ECMS数据库里的密码,而UCenter数据库里的密码并没有修改成功,所以依然要用原密码才能登录。
uc_protectedmembers 这个表存放的一般是其它UCenter应用的管理员,比如UCenter Home的管理员。

产生问题的原因在e\member\class\user.php文件,第809-827行代码如下:

PHP Code复制内容到剪贴板
  1. //--------------------------- Ucenter ---------------------------  
  2.         $ucresult = uc_user_edit($username,$trueoldpassword,$truepassword,$email,1);  
  3.         if($ucresult == -1)  
  4.         {  
  5.                 printerror('旧密码不正确','',1,0,1);  
  6.         }   
  7.         elseif($ucresult == -4)  
  8.         {  
  9.                 printerror('Email 格式有误','',1,0,1);  
  10.         }  
  11.         elseif($ucresult == -5)  
  12.         {  
  13.                 printerror('Email 不允许注册','',1,0,1);  
  14.         }  
  15.         elseif($ucresult == -6)  
  16.         {  
  17.                 printerror('该 Email 已经被注册','',1,0,1);  
  18.         }  
  19.         @mysql_select_db($GLOBALS['phome_db_dbname']);  

 

uc_user_edit的最后一个参数是1,也就是修改新密码时不验证原密码,这时候UCenter里就多了一个判断,e\client\model\user.php文件第115-119行:

PHP Code复制内容到剪贴板
  1. if($ignoreoldpw) {  
  2.                         $isprotected = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid = '$data[uid]'");  
  3.                         if($isprotected) {  
  4.                                 return -8;  
  5.                         }  

 

这里判断要修改的用户是不是存在于uc_protectedmembers表中,如果存在就返回 -8 错误,而ECMS没有检查 -8 错误,最终导致UCenter数据库里的密码没有修改成功,而ECMS自己的数据库里的密码却修改成功了。

解决方法,将e\member\class\user.php文件第810行代码:

PHP Code复制内容到剪贴板
  1. $ucresult = uc_user_edit($username,$trueoldpassword,$truepassword,$email,1);  

 

改为:

PHP Code复制内容到剪贴板
  1. $ucresult = uc_user_edit($username,$trueoldpassword,$truepassword,$email,0);  

 

就可以了。

另外顺便提个建议,ECMS前台修改密码时,为何要先验证ECMS数据库里的密码?这样做是不是多余的?这样做的话就不能直接在UCenter的后台修改用户的密码,修改了之后虽然用户能用新密码登录ECMS前台,但是在ECMS前台修改密码时,原密码处依然要填写UCenter修改前的密码,因为ECMS数据库里的密码并没有被修改。

 


ajax使用帝国内置的登录接口

PHP Code复制内容到剪贴板
  1. var Loginform=$("#loginbox");  
  2. $.ajax({  
  3.         type: "POST",  
  4.         url: "/e/member/doaction.php",  
  5.         dataType: 'html',   
  6.         data:Loginform.serialize(),  
  7.         success:function(data){  
  8.             if(data.indexOf("用户名和密码不能为空")>0){  
  9.                 layer.open({  
  10.                     title: '佣兵总会',   
  11.                     content: '用户名和密码不能为空'  
  12.                 });  
  13.             };  
  14.             if(data.indexOf("您的用户名或密码有误")>0){  
  15.                 layer.open({  
  16.                     title: '佣兵总会',  
  17.                     content: '您的用户名或密码有误!'  
  18.                 });  
  19.             };  
  20.             if(data.indexOf("密码错")>0){  
  21.                 layer.open({  
  22.                     title: '佣兵总会',  
  23.                     content: '您的登录密码有误!'  
  24.                 });  
  25.             };  
  26.             if(data.indexOf("用户不存在,或者被删除")>0){  
  27.                 layer.open({  
  28.                     title: '佣兵总会',  
  29.                     content: '用户不存在或者被删除!'  
  30.                 });  
  31.             };  
  32.             if($.parseJSON(data).status == 1) {  
  33.                 $(document).append($.parseJSON(data).UC);  
  34.                 layer.open({  
  35.                     title: '佣兵总会',  
  36.                     content: '登录成功',  
  37.                     btn: ['去做任务''个人中心'],  
  38.                     yes:function(index){                        //另一个应该是no:function  
  39.                         window.location='/task/';  
  40.                     },  
  41.                     cancel: function(index){   
  42.                         window.location='/e/member/cp';  
  43.                     }  
  44.                 });  
  45.             };  
  46.          },  
  47.         error:function(){  
  48.             layer.alert("系统错误,请重新提交!");  
  49.         }  
  50.     })  

 

 

本文来自于:http://www.yoyo88.cn/note/note1/30.html

下一篇 关于采集
Powered by yoyo苏ICP备15045725号