Wordpress是非常優(yōu)秀的博客系統(tǒng),完全的國際化utf-8編碼多國語言包、豐富的插件支持、豐富的主題包(模板)、詳盡的開發(fā)人員手冊、完善的開源社區(qū)支持,因此非官方的Wordpress模板、插件也有非常好的兼容性、符合W3C標準。所以,雖然是博客系統(tǒng),但借助于豐富的插件,仍可以實現(xiàn)幾乎所有CMS系統(tǒng)能實現(xiàn)的功能。不過非常嚴重的缺點是效率非常低,即時安裝了緩存插件以及做大量的服務器端緩存。文章表容量在100條記錄以內(nèi)時,也慢到0.x秒的查詢速度(一個簡單的頁面都會調(diào)用至少12次數(shù)據(jù)庫查詢,PHP的函數(shù)嵌套就非常多層了),這在PHP程序中是非常緩慢的;當數(shù)據(jù)庫文章表的容量在10000條以上時,首頁執(zhí)行時間達到恐怖的5.x秒級別??!
Supesite是康盛創(chuàng)想商業(yè)公司的CMS產(chǎn)品,選中它的最主要原因是效率非常高,在幾乎不做緩存的情況下,一百萬條的數(shù)據(jù)首頁執(zhí)行時間都能在0.1x秒級別!初始功能豐富,適合國內(nèi)初學的站長使用。因以前是封閉軟件,前段時間剛開源,無開發(fā)人員手冊,無任何插件接口,無法開發(fā)插件,現(xiàn)階段要修改supesite的邏輯功能只能修改supesite源程序。使用supesite系統(tǒng)的大多是水平不高的站長,建幾個采集資訊的垃圾站,開源社區(qū)支持不豐富,就連官方的很多代碼都不符合W3C標準,所以也別指望目前能有誰開發(fā)出非常優(yōu)秀的supesite插件和模板。不過如果康盛創(chuàng)想能把Supesite像Discuz!論壇那么重視,我相信Supesite能做到國內(nèi)非常優(yōu)秀的CMS平臺,畢竟他們是有實力開發(fā)的,只是目前不夠完善。有朋友要問為什么我不選諸如國外的Joomla!、Dupal或者PHPCMS、DedeCMS等其他CMS平臺。這里簡單說一下國外的CMS平臺和Wordpress的優(yōu)缺點相差不大,國內(nèi)的PHPCMS和DedeCMS確實做的很優(yōu)秀,但是我主要看到了SupeSite的前景可能會比這兩個國內(nèi)CMS更好。
好了,下面開始說遷移步驟,以Wordpress 2.7遷移至Supesite 7.0(UTF-8)為例,注:寫詳細內(nèi)容太麻煩,只寫實現(xiàn)方法,請朋友們自己實現(xiàn),如確實有困難可聯(lián)系本人指導。
分析:依靠Wordpress(以下簡稱WP)和Supesite(以下簡稱SS)自己的程序邏輯,其實需要遷移的數(shù)據(jù)無非就是文章(資訊)、文章附件(圖片等)、文章評論、注冊用戶資料、主題模板,最后注意URL鏈接,盡量讓搜索引擎已收錄的鏈接能成功跳轉(zhuǎn)到新系統(tǒng)上,不被搜索引擎降分。
在文章資訊和文章附件少的時候,完全可以手動從WP復制粘貼文章到SS中,一篇一篇文章重新添加。
一、確保原SupeSite站點可訪問。
例如本站在5月31日之前http://www.littz.cn是wordpress系統(tǒng),所以原wordpress站點是http://www.littz.cn。
如果本機localhost調(diào)試,也建議以基于多域名的虛擬主機方式來配置站點,這樣后期修改量更小。
二、搭建新的UCenter(簡稱UC)和臨時SupeSite平臺。
注意是UCenter,不是UCenterHome。UCenter為康盛產(chǎn)品平臺的用戶中心,UCenter為SNS交友產(chǎn)品,UCenter必需,UCenterHome非必須。例如本站UC為http://uc.littz.cn,臨時SS為http://temp.littz.cn。SupeSite安裝方法請參考其官方網(wǎng)站http://www.discuz.net/thread-1239276-1-1.html
三、用SS采集器采集原WP文章。
使用SS采集器自己添加規(guī)則按分類多次采集http://www.littz.cn上的文章到臨時SS站點http://temp.littz.cn對應的分類中。
四、自寫PHP程序修改SS文章ID、發(fā)布時間與WP上對應文章的一致。
因SS采集器采集到的文章ID為自動增1,發(fā)布時間為當前時間,無法保持與WP系統(tǒng)下的對應文章ID和發(fā)布時間一致。所以此時應自寫PHP程序,思路為:
1、首先讓SS數(shù)據(jù)庫中supe_spaceitems、supe_spacenews和supe_attachments表的itemid、nid每個增加10000。目的是修改SS文章ID時不會出現(xiàn)ID沖突的情況。
2、每次傳遞一個ID給自寫程序,該程序利用此ID到WP的數(shù)據(jù)庫wp_posts表(WP文章表)中查詢post_ID主鍵,得到post_title(文章標題,賦值給$title變量),得到post_date(文章發(fā)布時間賦值給$postdate)。參考SQL語句
1.
select
`post_title`, `post_date`
from
`wp_posts`
where
`post_ID` =
'{$id}'
;
3、根據(jù)剛剛得到的$title,到SS的數(shù)據(jù)庫中的supe_spaceitems表(SS文章列表)中查詢subject為$title的,得到itemid(賦值給$ssoldid)。參考SQL語句
1.
select
`itemid`
from
`supe_spaceitems`
where
`subject`
LIKE
'%{$title}%'
LIMIT 0,1;
4、因為WP數(shù)據(jù)庫記錄發(fā)布時間為標準日期型,而SS數(shù)據(jù)庫記錄UNIX時間戳型,如下圖所示,所以再導入時間時應用PHP程序先行處理,PHP語句
1.
date_default_timezone_set(
"Asia/Shanghai"
);
2.
$postdate
=
strtotime
(
$postdate
);
1.
update
`supe_spaceitems`
set
`itemid`=
'{$id}'
, `dateline`=
'{$postdate}'
where
`itemid`=
'{$ssoldid}'
;
5、根據(jù)剛剛得到的$ssoldid,到SS的數(shù)據(jù)庫中的supe_spacenews表(SS文章內(nèi)容表)中查詢itemid為$ssoldid的,改寫itemid和nid均為$id。參考SQL語句
1.
update
`supe_spacenews`
set
`itemid`=
'{$id}'
, `nid`=
'{$id}'
where
`itemid`=
'{$ssoldid}'
;
6、到SS的數(shù)據(jù)庫中的supe_attachments表(SS文章附件表)中查詢itemid為$ssoldid的,并改寫itemid為$id。參考SQL語句
1.
update
`supe_spaceitems`
set
`itemid`=
'{$id}'
where
`itemid`=
'{$ssoldid}'
;
7、設$id循環(huán)增1,到你原來的WP系統(tǒng)數(shù)據(jù)庫文章ID最大值的那個結(jié)束
8、復查文章,看看有無錯誤。
9、設置supe_spaceitems、supe_spacenews和supe_attachments表的itemid或nid的自增字段為你目前最大itemid+1,否則用SS系統(tǒng)后寫一篇文章,其ID將為10001。
五、評論導入。
將WP的post_comments表導出為Microsoft Excel CSV格式,使用Excel編輯添加刪除列等,使其存放格式與supe_spacecomments表一致。如圖:
將修改后的Excel表格另存為unicode的csv格式,然后FTP傳至服務器上,使用此文http://www.littz.cn/viewnews-100.html提供的方法將csv文件導入SS數(shù)據(jù)庫的supe_spacecomments表中。記得檢查導入的數(shù)據(jù)是否正確
六、用戶導入
WP和UC的密碼加密算法不同,不能直接復制密文的方式導入,所以目前沒有很好的辦法保留原有用戶密碼導入,只能在UC中創(chuàng)建新用戶,用戶名與郵件設置為和原WP中的注冊用戶一致,再到SS登錄中使用忘記密碼功能給每個用戶發(fā)送一封忘記密碼的郵件,讓該用戶自己重設密碼。
八、主題包修改
如果打算設計不變,而把WP的主題包修改成SS系統(tǒng)可用的,應具備比較豐富的xHMTL、CSS以及PHP知識,將原WP主題下載,保持主題包內(nèi)部文件的原有相對路徑。參考SS的default主題結(jié)構(gòu),將原來的index.php修改成index.html.php,header.php修改成header.html.php等,以SS模板文件的形式存在。
01.
在每個.html.php文件頭部加入
02.
03.
修改php get_header(); ?>為<!--{template header}-->修改為
04.
05.
修改和為
$_SCONFIG
[sitename]
06.
07.
修改為{S_URL}/templates/
$_SCONFIG
[template]/style.css
08.
09.
刪除pingback
10.
11.
修改為
$_SCONFIG
[seohead]
12.
13.
修改為{S_URL}/templates/
$_SCONFIG
[template]
14.
15.
修改和及為{S_URL}
16.
17.
修改為<!--{loop
$channels
[
'menus'
]
$key
$value
}--><LI><A href=
"$value%5Burl%5D"
>
$value
[name]</A></LI><!--{/loop}-->修改為<!--{block name=
"category"
parameter=
18.
"type/news/isroot/1/order/c.displayorder/limit/0,12/cachetime/
19.
80800/cachename/category"
20.
}--><!--{loop
$_SBLOCK
[
'category'
]
$value
}--><LI><A href=
"$value%5Burl%5D"
>
$value
[name]</A></LI><!--{/loop}-->修改為<!--{template footer}-->修改為<!--{block name=
"spacenews"
parameter=
21.
"catid/
$thecat
[subcatid]/order/
22.
i.dateline DESC/perpage/10/cachename/allnews/tpl/data"}--><!--獲取當前分類所有文章并分頁顯示--><!--{
if
$_SBLOCK
[
'allnews'
]}--><!--{loop
$_SBLOCK
[
'allnews'
]
$value
}-->修改為<!--{/loop}-->修改為
$value
[subject]
23.
24.
修改為#
date
(
"Y年m月d日"
,
$value
[
"dateline"
])#
25.
26.
修改為
$value
[url]
等等,總之參考default主題修改
九、開啟Rewrite并添加自定義Rewrite規(guī)則。
01.
rewrite ^/([0-9]+)/spacelist(.+)$ /index.php?uid/
$1
/action/spacelist/type
$2
last;
02.
rewrite ^/([0-9]+)/viewspace(.+)$ /index.php?uid/
$1
/action/viewspace/itemid
$2
last;
03.
rewrite ^/([0-9]+)/viewbbs(.+)$ /index.php?uid/
$1
/action/viewbbs/tid
$2
last;
04.
rewrite ^/([0-9]+)/(.*)$ /index.php?uid/
$1
/
$2
last;
05.
rewrite ^/([0-9]+)$ /index.php?uid/
$1
last;
06.
rewrite ^/action(.+)$ /index.php?action
$1
last;
07.
rewrite ^/category(.+)$ /index.php?action/category/catid
$1
last;
08.
rewrite ^/viewnews(.+)$ /index.php?action/viewnews/itemid
$1
last;
09.
rewrite ^/viewthread(.+)$ /index.php?action/viewthread/tid
$1
last;
10.
rewrite ^/mygroup(.+)$ /index.php?action/mygroup/gid
$1
last;
這導致原WP網(wǎng)址結(jié)構(gòu)為http://www.littz.cn/html/2009/300.html,因為SS不能自定義URL地址,所以SS的文章URL為http://temp.littz.cn/viewnews-300.html,我們需要用Nginx做個跳轉(zhuǎn),在原有SS默認Nginx Rewrite規(guī)則上增加以下規(guī)則:
01.
rewrite ^/album http:
//picasaweb.google.com/littlehz permanent;
02.
rewrite ^/about /action-channel-name-about.html permanent;
03.
rewrite ^/pollsarchive /action-poll-pollid-1.html permanent;
04.
rewrite ^/todo /action-channel-name-about.html permanent;
05.
rewrite ^/downloads /m.php?name=downloads permanent;
06.
rewrite ^/sitemap /action-site-type-map.html permanent;
07.
rewrite ^/tag/(.+)$ /action-tag-tagname-
$1
.html permanent;
08.
rewrite ^/category/technology /category-1.html permanent;
09.
rewrite ^/category/tune /category-2.html permanent;
10.
rewrite ^/category/tattle /category-3.html permanent;
11.
rewrite ^/category/share /category-4.html permanent;
12.
rewrite ^/html/([0-9]+)/([0-9]+).html /viewnews-
$2
.html permanent;
這樣保證了雖然URL更改了,但不會丟失鏈接,出現(xiàn)404錯誤找不到該頁。請根據(jù)原WP自定義URL結(jié)構(gòu)并參考本規(guī)則自寫規(guī)則,每個網(wǎng)站的結(jié)構(gòu)都不同,Apache的Rewrite規(guī)則也與此不同,但類似。
十、替換修改臨時SS系統(tǒng)URL為原WP的URL
臨時SS系統(tǒng)URL為http://temp.littz.cn,先SS欲替代原系統(tǒng),必然要把SS的URL修改為http://www.littz.cn,可以使用官方的SS URL替換工具http://faq.comsenz.com/viewnews-196,或者手動修改UC中SS應用URL,修改SS配置文件,再手動進入數(shù)據(jù)庫中使用類似
1.
update
`supe_spacenews`
set
`message`=
replace
(`message`,
'temp.littz.cn'
,
'www.littz.cn'
);這樣的SQL語句進行替換。
十一、修改DNS解析A記錄到新服務器IP
原www.littz.cn的A記錄為67.220.69.79,現(xiàn)更改www.littz.cn的A記錄到64.71.167.26。等待DNS緩存更新,網(wǎng)站遷移完成。