一直找不到Lifetype搬到其他平台的方法,因為對網路程式或資料庫的技術不太熟,也沒法自己寫。但之前花時間看了一下Movable Type(MT)的備份格式(許多部落格平台可接受格式),發覺格式還滿簡單的,接著就突發奇想,為什麼不用Lifetype的模板來輸出成MT的格式呢?
於是我依照上次的做法,把網誌備份到自己的電腦上的Instant Lifetype,然後開始修改模板。這想法很簡單,但還是碰到了一些問題。
首先是Lifetype沒法從模板控制要不要在首頁顯示全文,為了要輸出完整的文章,就必需要修改Lifetype的原始碼,修改方式如下:
修改class\view\defaultview.class.php,找到下面的程式碼,把紅色的部份移除。
function _addShowMoreLink()
{
$posts = $this->_params->getValue( 'posts' );//lt_include( PLOG_CLASS_PATH."class/data/textfilter.class.php" );
//$textFilter = new TextFilter();
$modifPosts = Array();
$rg = $this->_blogInfo->getBlogRequestGenerator();
foreach( $posts as $post ) {
if( $post->hasExtendedText()) {
$result = $post->getIntroText();
$showMoreText = $this->_locale->tr( 'read_more' );
$showMoreLink = " <a class=\"showMoreLink\" href=\"".$rg->postPermalink($post)."\">".$showMoreText."</a>";
$post->setText( $result. $showMoreLink );
}array_push( $modifPosts, $post );
}$this->_params->setValue( 'posts', $modifPosts );
}
另外更麻煩的問題在於分頁,因為分頁就沒辦法一次顯示所有的文章,從後台或是模板都沒辦法關閉分頁的功能,試著修改原始碼也改不出來,所以只能分成一頁一頁來輸出,但似乎每頁顯示文章數超過一定數目(大約20)就沒法正常顯示。但因為這次的搬家只有搬部份的文章,所以我就硬幹輸出了十幾頁MT格式的檔案,再把這些檔案結合在一起,最後匯入Pixnet裏。
(以下為2009年9月更新)
因為lifetype為分頁顯示,所以要到後台更改每頁顯示的文章數,請注意除了個人網誌的設定要改之外,全域設定也要更改,才能一次顯示較多的文章數(我試過一次100篇),另外也可以分次顯示,輸出數頁MT格的檔案,再用dos指令(copy/b)結合成一份mt檔。
請注意因為是在自已電腦上的lifetype操作,時區的設定可能會和放在虛擬空間上的lifetype不同(如果是用國外的網站空間的話),所以要更改時區設定讓顯示出來的時間是正確的。
(更新結束)
雖然有點辛苦,至少這方式可以完整地把文章和迴響都轉成MT格式,不過Pixnet不吃多重分類,這方面的資料就會lost掉了。
這不能算是很好用的搬家方式,很多細節也記不太清楚了,所以不整理成什麼教學文章,直接把我改的模板列在下面(沒什麼整理),有需要的可以參考看看。不過我也只測試過Pixnet,不知道匯入其他平台會不會有問題。(紅色部份是過濾類別用的,可按需要修改,不需要請移除)
把下列模板取代原本的main.template,再把輸出的網誌首頁原始檔用firefox或IE另存成文字檔,這文字檔就可以用來匯入Pixnet。這模板不保證沒有問題,引用資料備份我就沒有測試過,請小心使用。
因為會修改模板和原始檔,建議把網誌備份到自己的電腦,在自己的電腦上操作。
{section name=idx loop=$posts}
{assign var="post" value=$posts[idx]}
{assign var="postDate" value=$post->getDateObject()}
{assign var="postOwner" value=$post->getUserInfo()}
{assign var="not_display" value='FALSE'}
{foreach from=$post->getCategories() item=postCategory}
{assign var="id" value=$postCategory->getId()}
{if $id == "2"}
{assign var="not_display" value='YES'}
{/if}
{/foreach}
{if $not_display == 'FALSE'}
TITLE: {$post->getTopic()}
AUTHOR: {$postOwner->getUsername()}
DATE: {$locale->formatDate($postDate,"%m/%d/%Y %H:%M:%S")}
{foreach name=categories from=$post->getCategories() item=postCategory}
CATEGORY: {$postCategory->getDescription()}
{/foreach}
STATUS: publish
{if $blogsettings->getValue("comments_enabled")}
ALLOW COMMENTS: {$post->getCommentsEnabled()}
{/if}
ALLOW PINGS: 1
CONVERT BREAKS: 0
-----
BODY:
{$post->getIntroText()|strip}{if $post->hasExtendedText()}{$post->getExtendedText()|strip}{/if}-----
{foreach from=$post->getComments() item=comment}
{assign var="postDate" value=$comment->getTimestamp()}
COMMENT:
AUTHOR: {$comment->getUsername()}
EMAIL: {$comment->getUserEmail()}
URL: {$comment->getUserUrl()}
IP: {$comment->getClientIp()}
DATE: {$locale->formatDate($postDate,"%m/%d/%Y %H:%M:%S")}
{$comment->getText()|strip_tags}
-----
{/foreach}
{foreach from=$trackbacks item=trackback}
{assign var="trackbackDate" value=$trackback->getDateObject()}
PING:
TITLE: {$trackback->getTitle()}
URL: {$trackback->getUrl()}
BLOG NAME: {$trackback->getBlogName()}
DATE: {$locale->formatDate($trackbackDate,"%m/%d/%Y %H:%M:%S")}
{$trackback->getExcerpt()}
-----
{/foreach}
--------
{/if}
{/section}