【转】WordPress转PHPCMS策略-数据库完美转换
来源:http://www.sjyhome.com/php/wp-to-pc-sql.html
WordPress的访问速度不可恭维?那就试试能够生成纯静态的PHPCMS,保证能够让你的网页访问速度有一个质分飞升!
为什么选择PHPCMS?见 选择PHPCMS的理由
首先我们得分析出,转换过程中必须要面对的几个问题,以下是我的分析
文章ID必须一致,因为大多数情况下文章的URL都是根据ID生成的,为了保证原文章可以继续访问,这一点必须做到。
- 文章URL必须一致,有些用WP的小伙伴用了postname来定义文章URL,也没有关系,在PHPCMS中也做一个URL自定义的字段(见 phpcms文章内容页如何自定义url),然后再根据我的方法转换下。
- 发布时间最好相近,你不希望用户看到你整个网站的文章都是同一天转过来的吧?所以要把WP的文章发布时间也转过来。
- 最重要的就是文章标题和内容了,这2样也搬过来后基本上转移就完成了。
数据库转换工作开始
进入WP后台,选择工具-导出,选择文章,状态为已发布,最后下载导出的文件,我们得到了一个xml文件,我把他命名为wp.xml
本来上面那一步我想通过数据库来导出的,但是WP数据库中存在草稿,最近版本,图像等乱七八糟的信息,虽然也可以通过设置条件来导出,不过总没有上面的方法来的方便吧。
现在WP的所有重要文章都已经导出来了,打开wp.xml,咱们需要把该文件的数据通过PHP保存到数组,好方便导入到PHPCMS的数据库中。但是读取该文件时有些数据是无法识别的,所以必须先做替换工作,使数据标准化。
我们所要的数据中 文章ID <wp:post_id> 内容 <content:encoded> 以及 发布时间 <wp:post_date> 是无法识别的,所以搜索 'wp:post_id'替换为'post_id' 搜索'content:encoded'替换为'content';搜索'wp:post_date'替换为'post_date',现在我们所需要的数据都已经符合标准了,开始撰写PHP代码
<?php
$doc = new DOMDocument();
$doc->load('wp.xml'); //读取xml文件
$items = $doc->getElementsByTagName( "item" );
foreach( $items as $item )
{
$post_ids = $item->getElementsByTagName( "post_id" );
$post_id = $post_ids->item(0)->nodeValue; $titles = $item->getElementsByTagName( "title" );
$title = $titles->item(0)->nodeValue; $contents = $item->getElementsByTagName( "content" );
$content = $contents->item(0)->nodeValue; $post_dates = $item->getElementsByTagName( "post_date" );
$post_date = $post_dates->item(0)->nodeValue; $links = $item->getElementsByTagName( "link" );
$link = $links->item(0)->nodeValue;
$arr[]=array($post_id,$title,$content,$link,$post_date);
}
print_r($arr);
?>
这时我们要的数据已经在浏览器中打印出来的,为了看到更清晰的结构,请在网页源代码模式下查看效果。
下一步,我们需要连接数据库,并按照PHPCMS的数据库入库规则,把对应的参数填进去。在?>之前加入以下代码
mysql_connect("localhost", "root", "");
mysql_select_db("pc");
mysql_query("set names 'utf8'");
for($i=0;$i<count($arr);$i++){
$id=$arr[$i][0];
$title=$arr[$i][1];
$content=$arr[$i][2];
$link=$arr[$i][3];
$time=strtotime($arr[$i][4]);
$views=rand(100,10000);
mysql_query("INSERT INTO `v9_news` (`id`, `catid`, `typeid`, `title`, `style`, `thumb`, `keywords`, `description`, `posids`, `url`, `listorder`, `status`, `sysadd`, `islink`, `username`, `inputtime`, `updatetime`) VALUES('$id', 6, 0, '$title', '', '', '', '', 0, '$link', 0, 99, 1, 0, 'phpcms', '$time', '$time')");
mysql_query("INSERT INTO `v9_news_data` (`id`, `content`, `readpoint`, `groupids_view`, `paginationtype`, `maxcharperpage`, `template`, `paytype`, `relation`, `voteid`, `allow_comment`, `copyfrom`) VALUES('$id', '$content', 0, '', 0, 10000, '', 0, '', 0, 1, '|0')");
mysql_query("INSERT INTO `v9_hits` (`hitsid`, `catid`, `views`, `yesterdayviews`, `dayviews`, `weekviews`, `monthviews`, `updatetime`) VALUES
('c-1-$id','6', '$views', 0, 0, 0, 0, '$time')");
}
PHPCMS的数据库入库规则,我已经在另一篇文章中详细分析过,见 PHPCMS数据库入库模块制作教程
上面有一个catid的字段,我的默认分类为ID6,根据自身情况自行修改。最后进入PHPCMS后台,把URL规则改成跟原先WordPress中的固定链接相同就完成了。
欢迎转载,但请保留原文地址 http://www.sjyhome.com/php/wp-to-pc-sql.html
【转】WordPress转PHPCMS策略-数据库完美转换的更多相关文章
- xStream完美转换XML、JSON
xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...
- 数据库记录转换成json格式 (2011-03-13 19:48:37) (转)
http://blog.sina.com.cn/s/blog_621768f30100r6v7.html 数据库记录转换成json格式 (2011-03-13 19:48:37) 转载▼ 标签: 杂谈 ...
- 数据库表转换成javaBean对象小工具
package test.utils; import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter; ...
- innodb数据库批量转换表引擎为MyISAM
2013.0106 innodb数据库批量转换表引擎为MyISAM 来源:本站原创 PHP, 数据库, 系统技术 超过488名童鞋围观 1条评论 <?php //连接数据库 $host='lo ...
- Mysql MyISAM数据库批量转换表引擎为Innodb
Mysql MyISAM数据库批量转换表引擎为Innodb 最近在做事物处理需要把表结构都改为带有支持事物的Innodb引擎格式, 把里面数据库 用户名.密码 等信息修改为你自己的,放在网站下运行即可 ...
- Delphi String 与wideString 的完美转换
一般来说,String与widestring 的转换是系统自动进行的,但是,考虑如下字符串 s:=#2+#3+#0+#10+#0+#1+#164+#59;,显然S的长度为8,然后执行如下代码 var ...
- 数据库行列转换sql
经常折腾数据库,常常遇到数据库行列转换的问题,下面就用一个小例子来演示下如何进行行列转换. 1.创建一张表 CREATE TABLE [android_source]( [CREATETIME] [d ...
- PHPCMS V9数据库表结构分析
PHPCMS V9可以轻松承载百万级的访问数据,最大的功臣就是PHPCMS良好的数据库结构,在数据库的设计方面,一定是下足了功夫. 一般网站的信息量离这个级别相差甚远,但是了解学习一下PHPCMS ...
- C++11新特性之右值引用(&&)、移动语义(move)、完美转换(forward)
1. 右值引用 个人认为右值引用的目的主要是为了是减少内存拷贝,优化性能. 比如下面的代码: String Fun() { String str = "hello world"; ...
随机推荐
- vim配置有竖对齐线
https://github.com/lvxiaobo616/vim-indent-guides 参考 https://github.com/Yggdroot/indentLine 先安装 Yggdr ...
- 电脑技巧:Win8/Win10无法打开这个应用|无法使用内置管理员账户的完美解决方法
现在装win10系统的同伴越来越多了,相比于win7,win10在某些设置方面也有些变化,比如我们在使用win8或者win10时,会碰到如图所示的对话框: Windows10/Windows8无法使用 ...
- 最短路径(Floyd)算法
#include <stdio.h>#include <stdlib.h>/* Floyd算法 */#define VNUM 5#define MV 65536int P[VN ...
- 未签名有元程序集 Unsigned Friend Assemblies
C#中的访问修饰符internal可以使类型在同程序集中可以被相互访问.但有时会有这样一个要求,我们希望一个程序集中的类型可以被外部的某些程序集访问,如果设置成public的话,就被所有的外部程序集访 ...
- 适可而止:YAGNI原则
适可而止:You Ain't Gonna Need It YAGNI原则指的是只需要将应用程序必需的功能包含进来,而不要试图添加任何其他你认为可能需要的功能. 在一个软件项目中,往往80%的时间花费在 ...
- WinForm------弹出MessageBox窗口的同时隐藏当前窗口
private void Btn_OK_Click(object sender, EventArgs e) { this.Hide(); //隐藏当前窗口 MessageBox.Show(" ...
- Windows7-32bit系统安装MySQL-5.5.39-win32.msi服务图解
下载mysql-5.5.39-win32.msi安装文件,双击运行,出现如下界面. mysql安装向导启动,按“Next”继续 在 I accept the terms in the License ...
- Vim编辑器
vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...
- Markdown常用用法
很早之前就听过Markdown,一直没用,用过才发现,原来这么好用,迷人,就好比一位知性.大方.成熟.美丽的少妇一样深深吸引着我,特深夜把学习的笔记记录下. 引用 ">"最好 ...
- Language Tool ,a plugin for TeXStudio
Language Tool ,a plugin for TeXStudio TexStudio supports LanguageTool as an inline grammar checker. ...