アルファサード株式会社 代表取締役 野田 純生のブログ


MT3のエクスポート,インポートで basename (パーマリンク) を引き継ぐ方法。


公開日 : 2007-08-22 14:16:17


つまりMT3からMT4へ移行する時に、データベースのアップグレードじゃなくてエクスポート/インポート機能を使って移行したかったので (だって、せっかくだから「まっさら」にしたいじゃん)。

MT3.xの場合、エクスポート/インポート機能を使ってブログを移行すると エントリーの (カテゴリーも) basename が引き継がれません。つまり「パーマリンク」が変わってしまう。

何のための「パーマリンク」やねん! ってことで basename を引き継いで移行する方法を書いておく(さっきローカルのMT4にこのブログをエクスポート/インポートした。だってテストとかプラグイン開発とかするのにエントリー空っぽじゃなんだかやりにくいし)。

手順は以下の通り。

  • もしエントリーの「使っていないフィールド」があれば、そのフィールドに basename フィールドの値を移す。
  • 「使っていないフィールド」がなければ、どっかのフィールドにHTMLのコメントとかにしてbasename フィールドの値を突っ込む。
  • エクスポート/インポートする。
  • エクスポートインポートした方のブログで、別の場所に突っ込んだ basename を basenameフィールドに突っ込む。
  • いらなくなった basename を削除する。

このブログでは「使っていないフィールド」が無かったので、以下のようなスクリプトを書いた(MTフォルダに置いて実行)。


#!/usr/bin/perl -w

my $MTDIR;
use strict;
BEGIN {
    if ( $0 =~ m!(.*[/¥¥])! ) {
        $MTDIR = $1;
    } else {
        $MTDIR = './';
    }
    unshift @INC, $MTDIR . './lib';
    unshift @INC, $MTDIR . './extlib';
}

use MT;
my $mt = MT->new(Config => $MTDIR.'./mt-config.cgi');

my $iter = MT::Entry->load_iter({blog_id=>1});
while (my $entry = $iter->()) {
    my $basename = '<!--basename['.$entry->basename.']-->';
    my $text = $entry->text.$basename;
    $entry->text($text);
    $entry->save or die $entry->errstr;
    print $basename;
    print "¥n";
}

エクスポート/インポート後、以下のスクリプトを走らせる(whileの中身だけ書くね)。


while (my $entry = $iter->()) {
    my $text = $entry->text;
    my $pick_basename = $1 if {$text=~/<!¥-¥-basename¥[(.*?)¥]¥-¥->/};
    $text =~ s/<!¥-¥-basename¥[.*?¥]¥-¥->//;
    $entry->text($text);
    $entry->basename($pick_basename);
    $entry->save or die $entry->errstr;
    print $pick_basename;
    print "¥n";
}

ついでに、元のブログの方も entry_text フィールドに追加したコメントを削除。


while (my $entry = $iter->()) {
    my $text = $entry->text;
    $text =~ s/<!¥-¥-basename¥[.*?¥]¥-¥->//;
    $entry->text($text);
    $entry->save or die $entry->errstr;
}

アーカイブマッピングの関係で、カテゴリーの basename を引き継ぐ必要がある場合は、上記の方法と同時に以下の処理を行えばOK。

  • カテゴリ名をカテゴリーの description にHTMLのコメントで突っ込む(上記エントリーのやり方と同じ)。
  • カテゴリー名をカテゴリーの basename にする。
  • インポート/エクスポート後に元に戻す。

あ、一応やる場合はデータベースのバックアップとっておくってのと、自己責任だからね!

カテゴリ
タグ


このブログを書いている人
野田純生の写真
野田 純生 (のだ すみお)

大阪府出身。ウェブアクセシビリティエバンジェリスト。 アルファサード株式会社の代表取締役社長であり、現役のプログラマ。経営理念は「テクノロジーによって顧客とパートナーに寄り添い、ウェブを良くする」。 プロフィール詳細へ