曾经拥有的,不要忘记。不能得到的,更要珍惜。属于自己的,不要放弃。已经失去的,留作回忆。

Discuz论坛合并及问题解决

技术文档 31570浏览 0评论

最近需要对两个独立的论坛进行合并,两个论坛的环境分别如下:

论坛一:Discuz 7.2,运行在Linux系统上,UTF8编码;

论坛二:Discuz X2.5,运行在Windows操作系统上,GBK编码。

整合的步骤如下:

1、对论坛一进行升级,首先从Discuz 7.2升级到Discuz X2.0,再从X2.0升级到X2.5,然后备份数据库;

2、将论坛二的数据库在管理后台进行备份,强制编码为UTF8

3、对两个论坛的数据进行合并,使用的是网友提供的专门工具:Discuz! X2.5合并工具

这个操作需要在本地进行,分别安装两个新的论坛并把论坛一论坛二的数据、附件、头像文件等各自恢复进去。

运行Discuz! X2.5合并工具,界面如下

数据库的相关信息请根据自己的实际情况进行填写,并指定论坛二的头像存放的位置。

正常情况下,可以进行成功的整合。数据库整合成功后,把论坛二的附件拷入论坛一的相应目录中,再将工具目录下生成的uc2_avatar目录下所有文件复制到论坛一的data\avatar\目录下即可,然后在后台进行一些相应的设置。

在实际操作中碰到了几个比较棘手的问题,如下:

1、由于两个论坛的版块设置有些重叠,就把原来的某些一级版块统一迁移到一个版块的下面,成为二级版块,造成二级版块过多。后来考虑到也不是很方便,就想通过在一级版块下面建立主题分类的形式来完成。这时就提出了一个需求,即将某个二级版块的内容迁移到某个主题分类下面

这个操作可以在前台直接完成,选择版块相应的帖子,并迁移到相应的分类

问题是版块下面的帖子太多,不太可能这样去操作,后台也没有提供可以全部一次性移动的工具,只好直接去操作数据库了。

在phpmyadmin或者其他工具中执行如下命令:

UPDATE `pre_forum_thread` SET `fid` = '136',`typeid`='64' WHERE `pre_forum_thread`.`fid` =103;

UPDATE `pre_forum_post` SET `fid` = '136' WHERE `pre_forum_post`.`fid` =103;

说明:数字103是帖子目前所在版块的ID,136是需要迁移过去的版块的ID,64是需要迁移过去的主题分类的ID。

多个版块,多次执行上面的命令即可,操作完成后,在后台更新一下缓存。

2、整合完成后,发现前台个人资料设置出现问题了,页面是一片空白。

经过程序跟踪调试,分析程序,在/source/include/spacecp/spacecp_profile.php中:

$defaultop = '';
$profilegroup = C::t('common_setting')->fetch('profilegroup', true);
foreach($profilegroup as $key => $value) {
    if($value['available']) {
        $defaultop = $key;
        break;
    }
}

$operation = in_array($_GET['op'], array('base', 'contact', 'edu', 'work', 'info', 'password', 'verify')) ? trim($_GET['op']) : $defaultop;

echo "== $operation ==";

正常的,$operation 是 base,可以正常编辑个人资料;异常的,$operation 是 空串,右边出现空白。

从程序中不难看出,问题出在C::t('common_setting')->fetch('profilegroup', true); 中。

查询数据库,发现profilegroup字段的值是0,正常情况下肯定不应该是这样的。

SELECT * FROM `pre_common_setting` WHERE skey = 'profilegroup'

于是重新安装了一次Discuz X2.5,得到了正常情况下的profilegroup的值,用这个正常的值去更新出现异常的profilegroup的值,语句如下:

REPLACE INTO `pre_common_setting` VALUES('profilegroup', 'a:5:{s:4:"base";a:4:{s:9:"available";i:1;s:12:"displayorder";i:0;s:5:"title";s:12:"基本资料";s:5:"field";a:17:{s:8:"realname";s:8:"realname";s:6:"gender";s:6:"gender";s:8:"birthday";s:8:"birthday";s:9:"birthcity";s:9:"birthcity";s:10:"residecity";s:10:"residecity";s:10:"residedist";s:10:"residedist";s:15:"affectivestatus";s:15:"affectivestatus";s:10:"lookingfor";s:10:"lookingfor";s:9:"bloodtype";s:9:"bloodtype";s:6:"field1";s:6:"field1";s:6:"field2";s:6:"field2";s:6:"field3";s:6:"field3";s:6:"field4";s:6:"field4";s:6:"field5";s:6:"field5";s:6:"field6";s:6:"field6";s:6:"field7";s:6:"field7";s:6:"field8";s:6:"field8";}}s:7:"contact";a:4:{s:5:"title";s:12:"联系方式";s:9:"available";s:1:"1";s:12:"displayorder";s:1:"1";s:5:"field";a:7:{s:9:"telephone";s:9:"telephone";s:6:"mobile";s:6:"mobile";s:3:"icq";s:3:"icq";s:2:"qq";s:2:"qq";s:5:"yahoo";s:5:"yahoo";s:3:"msn";s:3:"msn";s:6:"taobao";s:6:"taobao";}}s:3:"edu";a:4:{s:9:"available";i:1;s:12:"displayorder";i:2;s:5:"title";s:12:"教育情况";s:5:"field";a:2:{s:14:"graduateschool";s:14:"graduateschool";s:9:"education";s:9:"education";}}s:4:"work";a:4:{s:9:"available";i:1;s:12:"displayorder";i:3;s:5:"title";s:12:"工作情况";s:5:"field";a:4:{s:10:"occupation";s:10:"occupation";s:7:"company";s:7:"company";s:8:"position";s:8:"position";s:7:"revenue";s:7:"revenue";}}s:4:"info";a:4:{s:5:"title";s:12:"个人信息";s:9:"available";s:1:"1";s:12:"displayorder";s:1:"4";s:5:"field";a:10:{s:10:"idcardtype";s:10:"idcardtype";s:6:"idcard";s:6:"idcard";s:7:"address";s:7:"address";s:7:"zipcode";s:7:"zipcode";s:4:"site";s:4:"site";s:3:"bio";s:3:"bio";s:8:"interest";s:8:"interest";s:7:"sightml";s:7:"sightml";s:12:"customstatus";s:12:"customstatus";s:10:"timeoffset";s:10:"timeoffset";}}}');

ok,正常了!

在Discuz官方论坛上搜索了一下,发现类似的问题出现得挺多的,是个bug,而且官方也早就知道了,只是不知道为什么最新版中还会出现这个问题。

转载请注明:自由的风 » Discuz论坛合并及问题解决

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (2)

  1. 我的论坛版本是X3.0gbk转为utf8的时候出现了个人资料不显示,
    经过你的方法,目前恢复了。
    太感谢了!

    流河虾米2014-01-05 12:16 回复