1、熟悉zblog和typecho的数据表。
首先进入phpmyadmin平台,看看zblog和typecho数据表的不同之处。
我们需要转换的数据表有以下几个:
zbp_category、zbp_tag =>> typecho_metas (分类、标签)
zbp_post =>> typecho_contents(文章、独立页面)
zbp_comment =>> typecho_comments(评论)
zbp_post =>> typecho_relationships(文章关联的分类和标签)
在上述几个表内,尽管字段名有所不同,但性质基本是一样的,自己对照看一下就明白了。
2、zblog数据表字段处理
typecho几个数据表的字段名和排序如下:
typecho-metas(分类、标签)
typecho-metas
typecho-contents(文章)
typecho-contents
typecho-comments(评论)
typecho-comments
对zblog的数据表字段名和排序进行处理,使之与typecho的字段名和排序一一对应。多出的字段可以先排在最后面(尽量先不要删除任何字段),若缺少的字段可以新增,如zbp_post数据表中没有modified(最后修改日期),就可以在“创建日期”后面新增一个字段,然后将“创建日期”的内容复制至“modified”字段内。
3、数据表导出、处理
分别将前述8个数据表以XML格式导出,并复制一份至其他文件夹备份(以防止数据转换出错)。
使用notepad软件对zblog各个数据表进行编辑,将数据表名、字段名全部替换为typecho相应的内容,然后将其复制至typecho对应数据表内(仅复制
标签内容,相同条目覆盖即可,其他内容不作改动)。需要注意的地方:
① 在zblog中,文章分类和标签分别记录在zbp_category、zbp_tag两个表内,而typecho是放在同一个表内的,所以需要将处理过的zbp_category、zbp_tag两个表的内容复制到typecho_metas表中。
② 在zblog的zbp_post内有log_CateID、log_Tag两个字段(即分类id和标签id),而在typecho_contents内是没有这两个字段的。在typecho系统中文章与分类和标签的关联都是体现在typecho_relationships数据表中的,在typecho_relationships中每一行数据表示一种归属关系,不管分类或是标签都是一行,对应id为typecho_metas中的内容。所以需要将zbp_post中的log_CateID、log_Tag两个字段内容都复制至typecho_relationships数据表中,仅保留cid和mid两个字段即可。
③ 在zblog中若某篇文章有多个标签,则在zbp_post对应的某行数据的log_Tag字段中会存在多个以{}符号分隔的标签id,此时如果需要保留全部标签,就需要手动将多个标签id分拆为多条记录并添加至typecho_relationships数据表中。当然你也可以每篇文章只保留一个标签id,其他全部清除。
4、数据表导入
在phpmyadmin中将typecho系统的typecho_metas、typecho_contents、typecho_comments、typecho_relationships四个数据表删除,再将本地修改好的四个typecho数据表导入系统,若执行命令后未报错即为成功,否则应根据错误信息检查、修改XML文件内容,一般会因为存在多条相同记录而报错。
5、最后优化
经过上述处理,zblog数据转换typecho基本就大功告成了。
在前台随便打开几遍文章,看看是否存在其他显示问题。由于zblog一般采用html代码编辑文章,而typecho采用的是markdown模式编辑,所以在数据转换后可能会在文章页面留下一些html代码(一般是由于zbog发表文章时采用了非默认的style样式),使用SQL命令进行批量替换即可。
需要用到的几个语句:
① SQL数据表字段内容的复制:
update 表名 set Column_Name1=Column_Name;
(将字段name的内容复制至name1)
② SQL字符替换:
update 表名 set Column_Name=replace(Column_Name,'text','text1')
(用“text1”替换“text”,若text1改为空值即为查找text并删除)
③ Notepad“正则表达式”查找模式
(.) 表示任意长度的任意字符,类似于word查找中的通配符
\ r 表示换行符
notepad-find
转载原创文章请注明,转载自木秀易林,原文地址:https://www.zhangweicheng.com/post/22/