寝かせておいてもしょうがないので、NucleusにMTファイル形式でImport/Exportをサポートするプラグインをリリースします。
ダウンロードはこちら [NP_ImpExp v1.0b][337clicks]
セキュリティfix版のNP_ImpExp v1.1をリリースしています。
※使い方についてはplugins:impexp [Nucleus CMS Japan Wiki]にまとめてあります
動作確認はNucleus 3.23(UTF-8)、PHP 4.4.2環境で行っています。
動作確認報告、バグ報告はこのエントリへ、コメント・トラックバックをお願いします。
† おことわり
自分の移行用に作ったものなので、人様の環境で上手く動くかどうかはまだ良く分かっていないところも多いです。そのため、多くの方にテストをしていただき、バグ報告をいただければ幸いです。本バージョンはテスト版ですので、本格的な移行の前に十分なテストを行うことをオススメします。
また、本プラグインは自分のblogのバックアップとしても利用することができますが、出力されるMTファイルはエントリのIDに関する情報を含んでいません。このため、ExportしたファイルをImportした場合、エントリIDには違うものが割り当てられます。バックアップ用途に利用される方はその点にご注意いただければと思います。
† インストール
アーカイブを展開し、すべてのファイルフォルダを「(インストールディレクトリ)/nucleus/plugins」に配置してください。その後、管理画面の「プラグイン管理」からインストールを実行します。
† 使い方
インストールが完了すると、管理画面の左側にあるメニューに「Import / Export」という項目が追加されるので、その項目をクリックするとNP_ImpExpの管理画面に入ることができます。
† Export
「Exportを実行する」ボタンを押すと、Nucleusの内容をMT形式のファイルとして出力します。
ファイルに出力されるのは、エントリ、コメント、およびトラックバック*1になります。
・ExportするBlog: 出力するblogを選択します
・エントリ中のを除去する: エントリ中に含まれる内容から<br />タグを取り除きます。
† Import
「Importを実行する」ボタンを押すと、MTファイルの内容からエントリ、コメント、トラックバックを取り込みます。
・MT File: MT形式のファイルを指定します
・Import先のBlog: 取り込み先のblogを指定します
・ファイルの文字コード: 上記で指定したファイルの文字コードを指定します
お疲れ様です。
エントリのIDに関する情報を含んでいません。
ということなんですが、たとえばMTからのデータをインポートするときにすでにNucleus側にいくつかのエントリがあったとします。
その場合、
1.すべてMT側のデータで上書きされてしまう
2.NucleusとMTのデータがマージされてきちんと日付順に並ぶ
のどちらになるのでしょうか?
できれば2がいいなぁ…と思うのですが(^^;
藤咲さん
すいません。ちょっと誤解を呼ぶ表現でしたね。結論から言えば、プラグインの実際の動作は
2.NucleusとMTのデータがマージされてきちんと日付順に並ぶ
になります。
藤咲さんの指摘している文章で何が述べたかったのかというと、MTのファイルはエントリのIDに関する情報を含んでいないため、エクスポートしたファイルをほかのブログにそのままインポートしたとしても、そのidが同一になるように復元できるということを保障する手段がいまのところないということなのです。
エントリ同士の対応がわからないので、現在のところこのプラグインではエントリの上書きという動作を一切行っていません。インポートする際にはすべてのエントリが新規エントリとして追加されます。そのときに常に新しいIDが採番されるという作りこみになっています。
ありがとうございます。
いや、エントリのIDを含んでいないってことはそうだろうなとは思ったんですが、確証を得ておきたかったんです(^^;
データ移行実績を順調に積んでいけば、MT形式でエクスポートできるブログからの乗り換えができるというアドバンテージができますねぇ。
リリース、おめでとうございます。早速使わせていただきます(一応、動作確認ということで)。
WordPressからMT形式でExportするプラグイン(http://epierce.blog.usf.edu...)というのは利用しているのですが、NucleusからMT形式でExportするものがなかなか見つかりませんでした。MT形式が実質的に標準となっている現状において、これは大きなアドバンテージですね!
お疲れ様です。リリース心待ちにしておりました。
さっそくImportを使わせていただきまして、ごそごそと動作確認状況を上げさせていただきました。
やはりこういう乗り換えツールができると、もっといろんな人がnucleusに触れる機会ができるのでしょうね。これからが楽しみなツールです。
レポートありがとうございます、バージョンアップの際には参考にさせてもらいますね。
確かにアップロードファイルに制限があるということがちゃんと明示されていなかったのはまずかったですね。
PHPとNucleusの設定にもよるのですが、ウチでは上限が8Mぐらいだったので気がつきませんでした。
バージョン: 1.0b
・から記事が1個できる
・<br>改行が消える
・カテゴリの自動追加
・impexp/index.php :51
・から記事が1個できる
消せばいいことなので追跡していません。
・改行が消える
Nucleusにデフォルトで
アイテム自体に 自動改行する・しないの設定が存在しないのが
根本的な原因だと思いますが、
Nucleusブログで自動改行しないにして
他ブログから持ってきたMTログ
(主にHTML専用エディタで投稿したような記事)
をインポートすると改行が消えて 読みにくくなるので
オプションに足すと使いやすくなると思います。
overview_japanese-euc.html
<tr>
<td>実行</td>
の上あたりに
<tr>
<td>stripBr</td>
<td><input type="radio" value="1" name="stripBr" id="stripBr1"><label for="stripBr1">はい</label><input type="radio" value="0" checked name="stripBr" id="stripBr0"><label for="stripBr0">いいえ</label></td>
</tr>
を挿入。
NP_ImpExp.phpのimportFromFile()の
$this->stripBr = 1;
を
変更
$this->stripBr = (requestVar('stripBr')!=0);
・カテゴリの自動追加
存在しないカテゴリは自動で追加のオプションがあるとさらに便利になります。
(移転の際いります)。
<tr>
<td>AutoAddCategory</td>
<td><input type="radio" value="1" checked name="AutoAddCategory" id="AutoAddCategory1"><label for="stripBr1">はい</label><input type="radio" value="0"name="AutoAddCategory" id="AutoAddCategory0"><label for="stripBr0">いいえ</label></td>
</tr>
function getCategoryIdFromName($name) はない場合デフォルトを返すようなので
existsCategoryIdFromName
関数がないのでgetCategoryIdFromNameのコードを途中まで再利用して判定
// $catid = $blog->getCategoryIdFromName($entry['PRIMARY CATEGORY']);
$catid = 0;
$res = mysql_query('SELECT catid FROM '.sql_table('category')
.' WHERE cblog='.$blog->getID().' and cname="' . addslashes($entry['PRIMARY CATEGORY']) . '"');
if (mysql_num_rows($res) > 0) {
$o = mysql_fetch_object($res);
$catid = $o->catid;
}
if (!$catid) {
if (($entry['PRIMARY CATEGORY']!='')&&(requestVar('AutoAddCategory')!=0))
{
$catid = $blog->createNewCategory($entry['PRIMARY CATEGORY'],'');
}
if (!$catid) { $catid = $blog->getDefaultCategory(); }
}
・impexp/index.php :51
$oPluginAdminの宣言前なので
$oPluginAdmin->start();
は使えません。
・PRIMARY CATEGORYが空でCATEGORYに設定した値を返す
大手サイトもあるので(使っている3サイトのうち2個)
CATEGORYも覗くようにすると便利かも
if (!$entry['PRIMARY CATEGORY'])
{
$entry['PRIMARY CATEGORY'] = $entry['CATEGORY'];
}
if ($entry['PRIMARY CATEGORY'] == null) { $entry['PRIMARY CATEGORY'] = ''; }
ありがとうございます。内容を確認して、次のバージョンアップの際には参考にさせてもらいたいと思います。
コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。