dede5.7整合discuz

99ANYc3cd6
预计阅读时长 24 分钟
位置: 首页 DEDE建站 正文

整合的关键在于打通两个系统的用户数据表,当用户在 DedeCMS 中注册或登录时,Discuz! 的数据库也相应地执行操作,反之亦然,这通常通过修改注册和登录的代码文件,并引入 Discuz! 的核心函数库来实现。

dede5.7整合discuz
(图片来源网络,侵删)

第一部分:准备工作(非常重要!)

在开始任何修改之前,请务比做好以下准备工作,否则一旦出错,数据恢复将非常困难。

  1. 环境确认:

    • DedeCMS 5.7 (GBK 或 UTF-8 版本,本教程以 GBK 为例,UTF-8 只需注意字符编码一致即可)
    • Discuz! 7.2 (必须与 DedeCMS 的编码版本一致,即 Dede 是 GBK,Discuz 也必须是 GBK)
    • PHP 5.2+ / MySQL 5.0+
    • 支持 Rewrite 的 Web 服务器 (如 Apache/Nginx)
  2. 文件备份:

    • 完整备份你的网站所有文件到本地。
    • 完整备份你的网站数据库(导出为 SQL 文件)。
  3. 安装位置:

    dede5.7整合discuz
    (图片来源网络,侵删)
    • 强烈建议将 Discuz! 安装在 DedeCMS 的一个子目录下。
      • DedeCMS 根目录:/wwwroot/
      • Discuz! 根目录:/wwwroot/bbs/
    • 这种方式可以简化后续的配置和路径处理。

第二部分:整合步骤

步骤 1:修改 Discuz! 配置文件

我们需要让 Discuz! 的数据库配置与 DedeCMS 保持一致,并开启整合接口。

  1. 打开 Discuz! 配置文件:

    • 进入你的 Discuz! 安装目录(/wwwroot/bbs/)。
    • 找到并打开 config.inc.php 文件。
  2. 修改数据库配置:

    • 找到数据库连接信息部分,将其修改为与你的 DedeCMS data/common.inc.php 文件中完全一致的信息。
    • // 在 config.inc.php 中找到并修改以下内容
      $_config['db']['1']['dbhost'] = 'localhost'; // 数据库地址
      $_config['db']['1']['dbuser'] = 'your_db_user'; // 数据库用户名
      $_config['db']['1']['dbpw'] = 'your_db_password'; // 数据库密码
      $_config['db']['1']['dbname'] = 'your_db_name'; // 数据库名
      $_config['db']['1']['tablepre'] = 'pre_'; // Discuz 表前缀,建议保持默认
  3. 开启 UCenter:

    dede5.7整合discuz
    (图片来源网络,侵删)
    • 虽然我们不使用 UCenter 的 Web 管理界面,但必须启用它的底层功能来整合用户。
    • config.inc.php 中找到 UC 配置部分,确保 ucenabled1
    • // 找到以下行
      $_config['uc']['_allow'] = '1';
      $_config['uc']['enabled'] = '1'; // 确保这个是 1
      // 后面的 URL、IP 等配置可以先随便填,因为我们不启动 UCenter 服务
      // 
      $_config['uc']['apppath'] = 'http://www.yourdomain.com/bbs/'; // Discuz 的安装目录
      $_config['uc']['appdir'] = 'http://www.yourdomain.com/bbs/';
      $_config['uc']['connect'] = '0';
  4. 保存并关闭 config.inc.php

步骤 2:修改 DedeCMS 的注册文件

目标是让 DedeCMS 在用户注册成功后,自动调用 Discuz! 的注册函数。

  1. 找到 DedeCMS 注册文件:

    • 进入 DedeCMS 根目录(/wwwroot/)。
    • 找到 member/reg_new.php 文件。
  2. 在文件末尾添加 Discuz! 注册代码:

    • 用文本编辑器打开 reg_new.php
    • 找到文件末尾的 ShowMsg() 函数调用,它通常在注册成功之后。
    • ShowMsg() 函数之前,添加以下代码:
    // 引入 Discuz! 的核心函数库
    // 注意:这里的路径是相对于 DedeCMS 根目录的
    require_once(dirname(__FILE__).'/bbs/ucenter_client/client.php');
    // 准备 Discuz! 注册所需的数据
    $uid = $_POST['userid']; // DedeCMS 的用户名字段
    $password = $_POST['pwd']; // DedeCMS 的密码字段 (MD5)
    $email = $_POST['email']; // DedeCMS 的邮箱字段
    // 调用 Discuz! 的用户注册接口
    // 注意:Discuz! 7.2 的用户名和密码字段可能不同,这里需要根据实际情况调整
    // Discuz! 的用户名是 username,密码是 password
    $synuser = array(
        'uid' => $uid,
        'username' => $uid,
        'password' => $password,
        'email' => $email
    );
    // 调用 UCenter 的用户注册方法
    // 注意:这里需要使用正确的 Discuz! 应用 ID
    // 在 Discuz! 的 UCenter 设置中,DedeCMS 应该是一个应用,其 appid 通常为 1 (默认)
    // 如果不确定,可以先不传 $appid,或者查看 ucenter_client 中的函数定义
    uc_user_register($uid, $password, $email);
    
  3. 保存并关闭 reg_new.php

步骤 3:修改 DedeCMS 的登录文件

目标是让 DedeCMS 在用户登录成功后,自动同步到 Discuz!。

  1. 找到 DedeCMS 登录文件:

    • 进入 DedeCMS 根目录。
    • 找到 member/index_do.php 文件(这是处理登录动作的文件)。
  2. 在登录成功后添加 Discuz! 登录代码:

    • 打开 index_do.php
    • 找到登录成功的逻辑部分,通常是一个 ShowMsg() 跳转,ShowMsg('成功登录,正在进入...',$gourl,0);
    • 在这个 ShowMsg() 之前,添加以下代码:
    // 引入 Discuz! 的核心函数库
    require_once(dirname(__FILE__).'/bbs/ucenter_client/client.php');
    // 获取当前登录的用户信息
    // $uid 和 $pwd 变量需要在登录验证成功后、跳转前获取到
    // 通常在验证登录的 SQL 查询之后,$userid 和 $pwd 变量已经存在
    $uid = $userid; // DedeCMS 的用户名
    $password = $pwd; // DedeCMS 的密码 (MD5)
    // 调用 Discuz! 的用户登录接口
    // 这个函数会更新 Discuz! 中用户的最后登录时间和 IP
    uc_user_synlogin($uid);
    

    注意: $userid$pwd 这两个变量名需要根据你 index_do.php 文件中的实际变量名来定,通常在执行 dede_checkuser($userid, $pwd) 函数后,这些变量就已经可用。

  3. 保存并关闭 index_do.php

步骤 4:修改 Discuz! 的登录文件

目标是让 Discuz! 的登录也能同步回 DedeCMS。

  1. 找到 Discuz! 登录文件:

    • 进入你的 Discuz! 目录(/wwwroot/bbs/)。
    • 找到 logging.php 文件。
  2. 在登录成功后添加 DedeCMS 登录代码:

    • 打开 logging.php
    • 找到处理登录成功的 switch($action) 中的 login 分支。
    • setcookieshowmessage 等操作之后,添加以下代码:
    // 引入 DedeCMS 的数据库配置,以便直接操作
    // 路径是相对于 Discuz! 根目录的
    require_once(dirname(__FILE__).'/../../data/common.inc.php');
    // 获取登录成功的用户信息
    // Discuz! 在登录成功后,会将用户信息存入 $_DCOOKIE['uid'] 等
    $discuz_uid = $_DCOOKIE['uid'];
    $discuz_username = $_DCOOKIE['auth']; // 注意:auth 是加密串,需要解密或从数据库查询
    // 更安全的做法是:通过 Discuz! 的用户ID,从数据库中查询出用户名和密码
    // 然后更新 DedeCMS 的 dede_member 表的 `mlogintime` 和 `mloginip` 字段
    // 这里提供一个简单的示例,直接更新登录时间
    if($discuz_uid) {
        $dsql = new DedeSql(false);
        $now_time = time();
        $now_ip = GetIP();
        $query = "UPDATE dede_member SET mlogintime='$now_time', mloginip='$now_ip' WHERE mid='$discuz_uid'";
        $dsql->ExecuteNoneQuery($query);
        $dsql->Close();
    }
    

    注意: 这部分相对复杂,因为 Discuz! 的用户ID (uid) 和 DedeCMS 的用户ID (mid) 可能不一致,最稳妥的方法是: a. 在 dede_member 表中增加一个 bbsuid 字段,用来存储对应的 Discuz! 用户ID。 b. 在 DedeCMS 注册时,将 Discuz! 返回的 $uid (Discuz! 的用户ID) 写入 dede_member.bbsuid 字段。 c. 在 Discuz! 登录时,通过 $_DCOOKIE['uid'] 查到 dede_member.bbsuid,再更新 DedeCMS 的记录。

    为了简化,上面的代码假设 miduid 是一致的,这在生产环境中不推荐,更推荐的方案是修改 reg_new.php,在调用 uc_user_register 后,将返回的 Discuz! 用户ID存入 DedeCMS 的 bbsuid 字段。


第三部分:整合后的测试

  1. 测试注册:

    • 清除浏览器 Cookie。
    • 访问你的 DedeCMS 注册页面 (/member/reg_new.php)。
    • 填写信息并提交。
    • 注册成功后,检查 DedeCMS 的 dede_member 表和 Discuz! 的 pre_common_member 表,看是否都新增了用户数据。
  2. 测试登录:

    • 使用刚才注册的账号,在 DedeCMS 登录页面登录。
    • 登录成功后,检查 Discuz! 的 pre_common_member 表,看 lastvisitlastactivity 字段是否被更新。
    • 清除浏览器 Cookie。
    • 使用同一账号,在 Discuz! 的登录页面登录。
    • 登录成功后,检查 DedeCMS 的 dede_member 表,看 mlogintimemloginip 字段是否被更新。
  3. 测试退出:

    • 在 DedeCMS 中退出登录,检查 Discuz! 的 Cookie 是否也被清除。
    • 在 Discuz! 中退出登录,检查 DedeCMS 的 Cookie 是否也被清除。
    • (注:退出同步的修改比较复杂,通常需要引入 uc_user_synlogout() 函数,如果不需要可以暂时不做。)

第四部分:常见问题与注意事项

  1. 字符编码问题:

    • 最常见的问题! 确保 DedeCMS 和 Discuz! 的数据库、文件编码完全一致(要么都是 GBK,要么都是 UTF-8),如果混用,会出现乱码。
  2. 路径问题:

    • require_once 引入文件时,路径一定要写对,使用 dirname(__FILE__) 是一个好习惯,可以保证路径的相对正确性。
  3. 表前缀问题:

    • 在写 SQL 语句时,如果直接操作数据库,要带上 Discuz! 的表前缀(如 pre_),如果使用 Discuz! 提供的函数(如 uc_user_register),则不需要关心,函数内部会处理。
  4. 安全性:

    整合后,两个系统的安全性是绑定的,确保你的服务器和数据库足够安全,防止一处被攻破,全盘皆输。

  5. 数据不一致:

    • 如果出现数据不同步,首先检查 config.inc.php 的数据库配置是否正确,然后检查 require_once 的路径是否正确,最后检查添加的代码逻辑是否有误。
  6. UCenter:

    • 虽然我们没有使用 UCenter 的管理后台,但它的 client.php 文件是整合的核心,确保 Discuz! 能正确加载这个文件。

这个教程涵盖了整合的主要流程,实际操作中可能会因为你的具体环境(如插件、自定义修改等)而产生差异,请灵活变通,再次强调,操作前备份!操作前备份!操作前备份!

-- 展开阅读全文 --
头像
lsqcurvefit在C语言中如何使用?
« 上一篇 01-05
dede主导航如何用limit限制显示数量?
下一篇 » 01-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]