帝国CMS整合Discuz有两种方式:
方式一、用Ucenter接口整合。使用Ucenter接口整合无需安装通行证跟万能会员接口。
方式二、用Discuz通行证接口整合。需先安装万能会员接口,然后再安装通行证。
Ucenter接口及Discuz通行证下载地址:http://www.phome.net/OpenSource/
以下笔记为Ucenter接口整合步骤:
第 1 步:上传整合接口
将接口包的“upload”目录里的文件夹及文件上传至帝国CMS的“e”目录里(注意是上传 upload 目录中的文件和目录,而不是上传 upload 目录本身)。
复制到帝国CMS的“e”目录里:
第 2 步:在Ucenter后台增加帝国CMS应用
登陆Ucenter后台 > 点击“应用管理” > 点击“添加新应用”:
点击添加新应用进入添加应用页面:
安装方式:选择自定义安装。
接口URL: 填帝国CMS的“e”目录地址,如:“http://域名/e”。
通信密钥: 任意的字符,由英文字母及数字组成。尽量长点。 (不填写也可以提交,系统会自动生成)
应用类型: 选择其他。
是否开启同步登录: 选择是。
是否接受通知: 选择是。
设置参数后点击提交,然后返回应用列表就可以看到我们刚才增加的应用:
第 3 步:配置Ucenter整合接口的配置参数文件e/config.inc.php
修改帝国CMS目录下的e/config.inc.php文件配置:(UTF-8版要用dreamweaver或editplus修改,用记事本会将文件转为gbk)
连接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设置
一般不用设置,默认即可。
如果原帝国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有两处修改
第 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为原版文件。
- include("../../config/config.php");
- include("../../config.inc.php");
在帝国中帐号登陆与退出,DZ可以同步,但如果在DZ中登陆注册,帝国则同步不了
解决Discuz X整合其他系统后同步问题
有很多程序整合discuz后,UC中显示通信成功,在整合端登陆注销,DX也会跟随同步登陆注销
但是反过来在DX中登陆注销,整合端反而不会跟随同步登陆注销。实在是很恶心!!!
后查询发现,原来是dx登陆注册的时候没有返回给UC状态。
所以暂时解决方案如下:
DX的client.php文件中(默认在uc_client目录下):
找到310行左右
- function uc_user_synlogin($uid) {
- $uid = intval($uid);
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
- } else {
- $return = '';
- }
- }
- return $return;
- }
- function uc_user_synlogout() {
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogout', array());
- } else {
- $return = '';
- }
- }
- return $return;
- }
修改为:
- function uc_user_synlogin($uid) {
- $uid = intval($uid);
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
- } else {
- $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
- }
- }
- return $return;
- }
- function uc_user_synlogout() {
- if(@include UC_ROOT.'./data/cache/apps.php') {
- if(count($_CACHE['apps']) > 1) {
- $return = uc_api_post('user', 'synlogout', array());
- } else {
- $return = uc_api_post('user', 'synlogout', array());
- }
- }
- return $return;
- }
这样即可实现双向同步登陆注销了。具体有什么后遗症没具体测试,有心的同学可以测试测试。
修改头部的Power by Discuz 名称:/Template/default/common/header.htm 去掉后面跟着的几个字
3.2的在header_common.htm
宽窄屏设置:
修改论坛title:界面—SEO设置—论坛—
这里改掉就可以了
去掉底部链接:进入后台—界面—界面设置—论坛首页—第三个显示友情链接,点否就可以了
全局-注册与访问控制-可设置为人工审核新会员
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函数先判断有没有激活,再判断有没有登录,是不是判断顺序搞反了?应该先判断有没有登录才对吧。
- // 省略……
- $userid=(int)getcvar('mluserid');
- // 省略……
- if(getcvar('mldoactive')==$userid)
- {
- // 省略……
- printerror('该用户未在本站激活,请重新登录以激活帐号',$gotourl,1,0,1);
- }
- // 紧接着判断有没有登录
这段代码在未登录时getcvar('mldoactive')和$userid是永远相等的呀,所以会一直提示激活,解决方法要么把判断登录的代码移到判断激活的代码前面,要么把
- if(getcvar('mldoactive')==$userid)
- 改为:
- 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行代码如下:
- //--------------------------- Ucenter ---------------------------
- $ucresult = uc_user_edit($username,$trueoldpassword,$truepassword,$email,1);
- if($ucresult == -1)
- {
- printerror('旧密码不正确','',1,0,1);
- }
- elseif($ucresult == -4)
- {
- printerror('Email 格式有误','',1,0,1);
- }
- elseif($ucresult == -5)
- {
- printerror('Email 不允许注册','',1,0,1);
- }
- elseif($ucresult == -6)
- {
- printerror('该 Email 已经被注册','',1,0,1);
- }
- @mysql_select_db($GLOBALS['phome_db_dbname']);
uc_user_edit的最后一个参数是1,也就是修改新密码时不验证原密码,这时候UCenter里就多了一个判断,e\client\model\user.php文件第115-119行:
- if($ignoreoldpw) {
- $isprotected = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid = '$data[uid]'");
- if($isprotected) {
- return -8;
- }
这里判断要修改的用户是不是存在于uc_protectedmembers表中,如果存在就返回 -8 错误,而ECMS没有检查 -8 错误,最终导致UCenter数据库里的密码没有修改成功,而ECMS自己的数据库里的密码却修改成功了。
解决方法,将e\member\class\user.php文件第810行代码:
- $ucresult = uc_user_edit($username,$trueoldpassword,$truepassword,$email,1);
改为:
- $ucresult = uc_user_edit($username,$trueoldpassword,$truepassword,$email,0);
就可以了。
另外顺便提个建议,ECMS前台修改密码时,为何要先验证ECMS数据库里的密码?这样做是不是多余的?这样做的话就不能直接在UCenter的后台修改用户的密码,修改了之后虽然用户能用新密码登录ECMS前台,但是在ECMS前台修改密码时,原密码处依然要填写UCenter修改前的密码,因为ECMS数据库里的密码并没有被修改。
ajax使用帝国内置的登录接口
- var Loginform=$("#loginbox");
- $.ajax({
- type: "POST",
- url: "/e/member/doaction.php",
- dataType: 'html',
- data:Loginform.serialize(),
- success:function(data){
- if(data.indexOf("用户名和密码不能为空")>0){
- layer.open({
- title: '佣兵总会',
- content: '用户名和密码不能为空'
- });
- };
- if(data.indexOf("您的用户名或密码有误")>0){
- layer.open({
- title: '佣兵总会',
- content: '您的用户名或密码有误!'
- });
- };
- if(data.indexOf("密码错")>0){
- layer.open({
- title: '佣兵总会',
- content: '您的登录密码有误!'
- });
- };
- if(data.indexOf("用户不存在,或者被删除")>0){
- layer.open({
- title: '佣兵总会',
- content: '用户不存在或者被删除!'
- });
- };
- if($.parseJSON(data).status == 1) {
- $(document).append($.parseJSON(data).UC);
- layer.open({
- title: '佣兵总会',
- content: '登录成功',
- btn: ['去做任务', '个人中心'],
- yes:function(index){ //另一个应该是no:function
- window.location='/task/';
- },
- cancel: function(index){
- window.location='/e/member/cp';
- }
- });
- };
- },
- error:function(){
- layer.alert("系统错误,请重新提交!");
- }
- })