返回列表 回复 发帖

Ucenter/Discuz与Joomla深度整合完全解决方案:版本2

Ucenter/Discuz与Joomla深度整合完全解决方案:版本2安装说明(入门新手完全版)

附件内包含了需要用到的所有文件!

此内容适合Joomla!1.5版本

    2009.11.23日,直接将演示站点全站打包供下载。请点击此处下载文件包。请点击此处下载数据库包。注意,无需对数据库进行任何改动。关于文件,只需比照本文查看某日期后改动的文件即可。

    2009.07.19晚再次修订,现在本文结尾处所声称的点已经全部实现。下载文件均已更新,对plugins/authentication/joomla.php文件的更改有所添加。请详读内文。

2009.07.18/19更新,修正在附件不能下载的问题,架设了测试网站。因为测试站点使用J1.5.12,因此,所有附件均有变更。请重新下载所有附件。
测试站点在:http://j15ucenter.treeber.net/

注意:本措施可能仍不适合有大量数据的生产环境用户,最好ucenter与joomla两表中的用户用户名不冲突。若有冲突,可自行想办法解决,或确定两个用户用户名email都一致。若用于生产环境,请仔细测试并自行负责。

感谢jet,感谢Jianer和动漫CG同学,我已经修正了代码中的单引号问题和大量其他问题。另外,若有整合不成功者,可以在本文下贴出网址或直接加我QQ2717438或在群里讨论,我将提供协助,以首先让其中几个正常运转。而后,望大家帮助大家。

1. 安装ucenter(请下载最新版本)及discuz(6.1for ucenter版本及以上,7.0版本亦可),遵照康盛创想官方说明,若对此步骤有所疑问,有两个joomla的QQ群内的热心网友应该可提供免费指导:27974098及44088499;
此步骤请注意,请确保复制了一个uc_client的文件夹到joomla安装根目录,这是ucenter的客户端程序库(感谢freeman提醒)。

2. 说明:若已经安装discuz,则请安装ucenter并照安装步骤提示整合discuz;

3. 在joomla安装根目录下放置文件configuration_uc.php,文件内容如下(按照文件中的注释修改数据库名及密码等配置参数,其中省略号的项目必须调整,其他项目据情况调整):
  1.     <?php
  2.     define('UC_CONNECT', 'mysql'); // 连接 UCenter 的方式
  3.     define('UC_DBHOST', 'localhost'); // UCenter 数据库主机
  4.     define('UC_DBUSER', 'dbuser'); // UCenter 数据库用户名
  5.     define('UC_DBPW', 'password'); // UCenter 数据库密码
  6.     define('UC_DBNAME', 'dname'); // UCenter 数据库名称
  7.     define('UC_DBCHARSET', 'utf8'); // UCenter 数据库字符集
  8.     define('UC_DBTABLEPRE', 'dbname.uc_'); // UCenter 数据表前缀
  9.     define('UC_DBCONNECT', '0'); // UCenter 数据库持久连接
  10.     define('UC_KEY', 'dfjsalkfjslakj32142080dasllkj'); // 与 UCenter 的通信密钥
  11.     define('UC_API', 'http://j15ucenter.treeber.net/ucenter'); // UCenter URL
  12.     define('UC_CHARSET', 'utf-8'); // UCenter 的字符集
  13.     define('UC_IP', '124.254.31.111'); // UCenter 的 IP
  14.     define('UC_APPID', 2); // 当前应用的 ID,根据后台添加的joomla应用不同而不同
  15.     ?>
复制代码
4. 在joomla安装根目录下创建api文件夹,放置如下两个文件(可直接将下面文件解压至joomla安装根目录):

api_rev2.zip(后面的附件内有)

如何在ucenter中添加一个应用与joomla连通?

    注意,请在ucenter控制后台添加一个应用,自定义参数,名字为joomla,应用的url填类似这样的
    http://j15ucenter.treeber.net
    通信密钥就是咱们在configuration_uc.php中设置的那一长串,这儿咱们设的是
    dfjsalkfjslakj32142080dasllkj
    应用类型选
    其他
    是否开启同步登录选
    是
    是否接受通知选
    是

现在,在ucenter的应用中看能不能顺利连到joomla了?

5. 说明:如上两步使ucenter对joomla系统发送的登录、注销、注册、更名、改密等消息能被本系统接收;

6. 现在进入关键步骤,我们将使joomla中的登录、注销、注册等事件发送至ucenter中;
请在joomla后台管理界面的插件安装中,安装插件(自动化程序)plugins,并在插件管理界面中启用它,安装包如下:

plu_joomlaucenter.zip(后面的附件内有)

8. 请修改如下两个joomla文件,注意修改前请备份文件为joomla.orig.php和controller.orig.php

针对 /plugins/authentication/joomla.php

    约86/88行,将
  1.     $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);
复制代码
改为
  1.     if($options['checkpassword']=='skip')
  2.     $testcrypt = $crypt;
  3.     else
  4.     $testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);
复制代码
同样是此文件,在开始处
jimport( 'joomla.plugin.plugin' );
后面添加
  1.     //added by afo...
  2.     include_once(JPATH_ROOT.DS."configuration_uc.php");
  3.     include_once(JPATH_ROOT.DS."uc_client".DS."client.php");
  4.     include_once(JPATH_ROOT.DS."api".DS."func_joomla_cb_user.inc.php");
  5.     //added by afo...end
复制代码
针对 /components/com_user/controller.php
请记住这两个位置

在约138行(在Joomla! 1.5.12中是第148行)
  1. // Redirect if the return url is not registration or login
  2. if ( ! $return ) {
  3. $return = 'index.php?option=com_user';
  4. }

  5. $mainframe->redirect( $return );
复制代码
还有约175行(在1.5.12中是约185行)
  1. // Redirect if the return url is not registration or login
  2. if ( $return && !( strpos( $return, 'com_user' )) ) {
  3. $mainframe->redirect( $return );
  4. }
复制代码
修改:

138/148行的改为:
  1. // Redirect if the return url is not registration or login
  2. if ( ! $return ) {
  3. $return = 'index.php?option=com_user';
  4. }

  5. //added by afo...
  6. exit('<script language="javascript">window.alert("login success");window.location.href="'.$return.'";</script>');

  7. $mainframe->redirect( $return );
复制代码
请注意:175/185行的改为:
  1. exit('<script language="javascript">window.alert("logout success");window.location.href="'.$return.'";</script>');
  2. // Redirect if the return url is not registration or login
  3. if ( $return && !( strpos( $return, 'com_user' )) ) {
  4. $mainframe->redirect( $return );
  5. }
复制代码
注意,本步骤中,必须修改核心文件。

7. 按如下措施检查登录:

从discuz中登录后进入joomla看系统是否登录;

从joomla中登录后进入discuz看系统是否登录;

分别从两个系统登录,在discuz中注销看系统是否完全注销;

分别从两个系统登录,在joomla中注销后看系统是否完全注销。

其他改密、改名等也均请测试。

8.已知实现和问题:

·可由joomla中注册,ucenter其他应用中(以下简称ucenter)中将同步添加

·可由joomla中登录退出,ucenter将同步登录退出;

·可由joomla中修改/重置密码,ucenter可有新密码;

·可由DZ或其他ucenter应用中(以下简称DZ)注册,登录后joomla中将同时有新用户(不论在何处登录);

·可由DZ登录退了,Joomla将同步登录退出;

·可在DZ/Ucenter中改密码,Joomla将同步更改密码

·可在Joomla中删除和修改用户资料,Ucenter将同步删除或更改资料(Email)

--已知若在DZ中注册后,没有再次登录,则Joomla中若注册同名用户系统会给出提示,但界面过于简单

--已经Ucenter中删除用户后不会通知Joomla,而程序中当时暂无判断Joomla中用户是否被删除

--若在joomla后台设置需要验证,则用户登录时仍然提示成功,实际上未登录,这似乎是1.5.12的bug

--在退出后DZ有时会显示用户仍然在状态,但可能会提示用户“您没有登录”,或者点击后才消除登录状态

为了规避问题,建议如下:

^最好只开启某一个应用的注册链接

^建议Joomla不需用户验证,DZ需要用户验证或采用验证码

^仅在Joomla中删除用户

^需要更多针对DZ的测试和设置

我的做法:采用Discuz注册。

另外,请先检查一下Phpinfo中output_buffering的值,不要设置为off

转自:blog.treeber.com/20090104/500.html

------------补充--------------------
benny
November 24th, 2009 at 7:10 pm

下载demo后, 发现/plugins/authentication/joomla.php中少了下面的内容,建议补充:
加在以下语句之前:
                // Initialize variables
                $conditions = '';

----------------------------------------------
  1. //added by afo...
  2. //if exists in ucenter, add it in joomla
  3. if(uc_user_checkname($credentials['username'])==-3){

  4. $activeuser = uc_get_user($credentials['username']);
  5. //var_dump($activeuser);exit('33');
  6. checkuserexists_user($activeuser);

  7. //if the password is right in ucenter, pass through the joomla auth
  8. $arrResult = uc_user_login($credentials['username'] , $credentials['password']);
  9. if($arrResult[0]>0){
  10. $options['checkpassword']='skip';
  11. }
  12. }
复制代码
-------------------

----------------------------
补充一点(转)
本人在实际测试中,开始是没有在导航栏里设置bbs的菜单,分别在两个IE浏览器中输入主站地址:www.csicw.com和[url]www.csicw.com/bbs[/url],在主站里登入登出,bbs里均可正常同步,但在Discuz里登入登出,主站都没反应,这个怪现象我找了很久才找到答案,原来要先在主站的菜单里设置好bbs的进入菜单,在打开主站之后,再从主站的导航菜单中打开论坛,才可以正常的同步。
附件: 您所在的用户组无法下载或查看附件
整站Demo安装注意:

1.请在安装后修改数据库名/密码为实际数据库名/密码,要改的地方至少四处(在我的文件中密码均为dsfadfa321):

./configuration.php

./configuration_uc.php

./bbs/config.inc.php,

./ucenter/data/config.inc.php

2.以下几个路径/bbs, /ucenter分别对应论坛和ucenter,ucenter的超管密码为admin, joomla及bbs的超管用户名密码均为admin/admin
附件: 您所在的用户组无法下载或查看附件
拜访了,多谢
仔细拜读这里
1# csicw


今天参阅,Discuz与Joomla深度整合完全解决方案

关于http://www.csicw.com/mb/forum/thread-535-1-1.html

我问一下如果不整合用户只是整合帖子到我的CMS 网站,关于UC 的操作和配置是否完全必要。

谢谢!
如果不整合用户就简单了,直接在CMS网站上插入DZ数据调用产生的外部调用代码就可以了。
今天完全按照上面的攻略跑一边,(CMS服务器和论坛服务器不再一起)
报告以下错误:

Warning: include_once(/home/content/b/l/a/blackberrycon/html/fanscms/uc_client/client.php) [function.include-once]: failed to open stream: No such file or directory in /home/content/b/l/a/blackberrycon/html/fanscms/plugins/authentication/joomla.php on line 21

Warning: include_once() [function.include]: Failed opening '/home/content/b/l/a/blackberrycon/html/fanscms/uc_client/client.php' for inclusion (include_path='.:/usr/local/php5/lib/php') in /home/content/b/l/a/blackberrycon/html/fanscms/plugins/authentication/joomla.php on line 21

Fatal error: Call to undefined function uc_user_checkname() in /home/content/b/l/a/blackberrycon/html/fanscms/plugins/authentication/joomla.php on line 117
本帖最后由 blackberryfans 于 2010-3-23 15:38 编辑

论坛服务器和CMS 服务器不在一起,

configuration_uc.php 如下: 是不是这里出现问题了。
  1. <?php



  2. define('UC_CONNECT', 'mysql');

  3. define('UC_DBHOST', '218.*.*.*');

  4. define('UC_DBUSER', 'root');

  5. define('UC_DBPW', '****');

  6. define('UC_DBNAME', 'blackberryfans');

  7. define('UC_DBCHARSET', 'gbk');

  8. define('UC_DBTABLEPRE', '`blackberryfans`.cdb_uc_');

  9. define('UC_DBCONNECT', '0');

  10. define('UC_KEY', '12c4V9D9z8M9k701Yc8dY81dc912efa1DeSdb5xee2mcj1Vcs8d45czel0q8L3n4');

  11. define('UC_API', 'http://www.blackberryfans.com/uc_server');

  12. define('UC_CHARSET', 'gbk');

  13. define('UC_IP', '218.*.*.*');

  14. define('UC_APPID', '1');

  15. define('UC_PPP', '20');



  16. ?>
复制代码
本帖最后由 blackberryfans 于 2010-3-25 11:46 编辑
如果不整合用户就简单了,直接在CMS网站上插入DZ数据调用产生的外部调用代码就可以了。
csicw 发表于 2010-3-19 17:08
感谢楼主,我们正在测试纯DZ数据调用产生的外部调用代码,(DISCUZ 代码已经强制转换到UTF-8)方便JOOMLA 调用了。

下面的问题是,如何让一个帖子的正文在JOOMLA 网页里面体现(包括图片等)。
测试下...
谢谢楼主做出如些好的东西!
谢谢楼主做出如些好的东西!
谢谢楼主做出如些好的东西!
楼主你的joomla是什么版本啊? 1.5.24的可以整合吗? 我一直通信失败
不工作Joomla1.5.25 Ucenter1.6和密码将无法工作。
返回列表