Discuz!官方免费开源建站系统

 找回密码
 立即注册
搜索

[经验] 【心得】Dv71SQL->Dz61主要解决:投票帖变普通帖

[复制链接]
seahog004 发表于 2009-3-7 12:04:45 | 显示全部楼层 |阅读模式
Dvbbs 7.1.0 sp1 SQL --> Discuz 6.1.0
之所以没有选择转到最新版本,是因为美女说6.1风格比较多 =,=
----------------------------
1.安装APMServ、mssql,下载dll让mysql支持mssql
2.还原mssql备份bak
3.安装UCenter1.0.0
4.安装Discuz6.1.0
5.XConvert1.3.1
6.按照说明修改数据库,开始转换
----------------------------
遇到第一个问题:step2转换主题分类时,每个板块都从1算起,导致typeid重复,一直报错过不去,清空表也没用。
研究发现,step9是专门用来转换主题分类的,所以step2这段纯属多余兼错误,删除该段代码,OK。
----------------------------
遇到第二个问题:step3每当遇到投票帖子就会出错,然后所在循环段的主题它又会重导一遍,以致于tid重复,我就拼命地一直删一直删……
后来受不了了,把debug模式关掉,让程序自己运行,睡觉去了。醒来查看转换结果,除了用户名超长的,成功率百分百,窃喜。
后来事实证明,没有追根究底,真是失策啊!此话后表。
----------------------------
遇到第三个问题:登陆密码错误
用官方提供的logging.php for 16md5覆盖到discuz\uc_client,OK。
----------------------------
进去看帖子发现,除了replyview,其它加密全部失效。
尝试用自定义代码替换,有两个缺点:一、嵌套多了就不生效,二、Archiver无图版浏览时什么都看到了。
又懒得修改N多的代码,于是去mssql里面把代码通通转成hide。
----------------------------
这时候又发现一个问题:有一大批fid远远超出现有版块编号的threads和posts记录。经过观察之后,认定是转换前没有清空的回收站里面的帖子(orz怪不得拿到的bak这么大),去后台的回收站,却发现空空如也。
于是新建一个版块,再把这批帖子的fid改成新版块的fid,然后再去删。
----------------------------
当我捣鼓了一大通之后,终于发现:投票帖都变成了普通帖!
回复

使用道具 举报

 楼主| seahog004 发表于 2009-3-7 12:46:26 | 显示全部楼层
本帖最后由 seahog004 于 2009-3-7 12:54 编辑

于是上来搜索,看到这篇帖子:https://discuz.dismall.com/viewthread.php?tid=941631
解决关键:修改dv_vote和dv_voteuser的字段类型。(希望官方早日修改XConvert转换说明的这句话“将其用户表(Dv_User)、板块表(Dv_Board)、主题表(Dv_Topic)、帖子表(Dv_bbs1,bbs2,bbs3)、附件表(Dv_Upfile)、短消息表(Dv_Message)、好友表(Dv_Friend)、管理员表(Dv_Admin)字段类型为 nText 的改为 Text 类型。”距离孤独的阿狼发那个帖子都大半年了-_-||)
我是这么改的
dv_vote   vote(ntext)->(text)  votenum(ntext)->(char,512)
dv_voteuser   voteoption(nvarchar,50)->(char,512)
重做step3之前,我决定顺便解决一下标题中尖括号被转化的问题,以及标题颜色(醒目灯)丢失的问题。
----------------------------
有些会员喜欢用尖括号来代替书名号,但是这些在step3过滤标题html代码时一并被过滤掉了。
解决:mssql数据库中,除了按照上述修改数据类型之外,执行如下sql语句
  1. update dv_topic set title=replace(title,'>','》') where (title like '%<%') and (title not like '%</%')
  2. update dv_topic set title=replace(title,'<','《') where (title like '%<%') and (title not like '%</%')
  3. update dv_topic set title=replace(title,'》》','》')
  4. update dv_topic set title=replace(title,'《《','《')
复制代码
----------------------------
标题颜色:修改step3.php,找到
  1.   $highlight  = 0;
复制代码
在下面添加
  1.   //标题颜色转换
  2.   if ($t['topicmode']==1) $highlight=7;//html标题统一变紫色
  3.   if ($t['topicmode']==2) $highlight=1;//红
  4.   if ($t['topicmode']==3) $highlight=6;//蓝
  5.   if ($t['topicmode']==4) $highlight=4;//绿
  6.   //
复制代码
----------------------------
好了,重做step3主题与投票。
做完之后检查,投票选项恢复了,后遗症来了。
由于step3重建了threads表,因此之后对threads有操作的step也要重做,计有step4、step9。
但是step4又对attachments表有操作,这时就要去掉对attachments操作的truncatetable和INSERT语句。
step4.php修改之后为
  1. <?php
  2. if($start <= 1) {
  3.   validid('f_id', 'upfile');
  4. }
  5. $query = $db['source']->query("SELECT * FROM {$source_tablepre}Upfile WHERE (F_ID BETWEEN $start AND $end)");
  6. while ($att =  $db['source']->fetch_assoc($query)) {
  7.   $att = array_change_key_case(daddslashes($att));
  8.   if($att['f_announceid']) {
  9.    $aid  = $att['f_id'];
  10.    $temp  = explode('|', $att['f_announceid']);
  11.    $tid  = $temp[0];
  12.    $pid  = $temp[1];
  13.    if($tid && $pid) {
  14.     $sql2 = "UPDATE {$discuz_tablepre}threads SET attachment=1 WHERE tid='$tid'";
  15.      $db['discuz']->query($sql2);
  16.      $convertedrows ++;
  17.     $totalrows ++;
  18.    }
  19.   }
  20.   $converted = 1;
  21. }
  22. if($converted || $end < $maxid) {
  23.   altertable('attachments', 'aid');
  24. }
  25. ?>
复制代码
保险起见,到后台单独备份一下attachments表。重做step4附件。重做step9主题分类。
善后:fid>现有版块编号的threads记录又出现了,如法炮制除之。
----------------------------
呼呼,在整个论坛转了一圈,暂时没再发现什么问题,赶紧优化备份压缩!然后慢慢地做美化:-)
回复

使用道具 举报

蓝豆 发表于 2009-3-7 14:24:34 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-9-17 08:46 , Processed in 0.117578 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表