この記事は半年以上前に書いたものです。情報の信憑性を疑ってください。また、コメントの受付は終了しました。

2008/04/15 18:30

Movable Typeの変な出力ファイル名(basename)の命名規則を削除する

Movable Typeは出力ファイル名を自動で作ってくれます。これは便利な機能なんだけど、有効なのは英語を使用する人のみですね。

例えば、今回のエントリーのタイトルだと「movable_typebasename」って出力ファイル名(basename)を作ります。なんだこりゃ?って感じです。英語のタイトルだと、綺麗に作ってくれるんですが、日本語だとダメすぎです。

タイトルにアルファベットが含まれないと「post_XXX」(XXXには数字)になります。いっそのこと、こっちに統一してくれた方がデータベースを眺めたときに綺麗でいいです。あとは、いろいろあるんだよ。

と言うことで、変な命名規則を削除して、全部post_XX形式にしてしまう方法です。

/lib/MT/Util.pm 858行目〜 sub make_unique_basename

sub make_unique_basename {
    my ($entry) = @_;
    my $blog = $entry->blog;
    my $title = $entry->title;
    $title = '' if !defined $title;
    $title =~ s/^\s+|\s+$//gs;
    if ($title eq '') {
        if (my $text = $entry->text) {
            $title = MT::I18N::first_n_text($text, MT::I18N::const('LENGTH_ENTRY_TITLE_FROM_TEXT'));
        }
        $title = 'Post' if $title eq '';
    }
    my $limit = $blog->basename_limit || 30; # FIXME
    $limit = 15 if $limit < 15; $limit = 250 if $limit > 250;
    my $base = substr(dirify($title), 0, $limit);
    $base =~ s/_+$//;
    $base = 'post' if $base eq '';
    my $i = 1;
    my $base_copy = $base;

    my $class = ref $entry; 
    while ($class->count({ blog_id => $blog->id,
                           basename => $base })) {
        $base = $base_copy . '_' . $i++;
    }
    $base;
}

ここがソレです。コレを変更します。

sub make_unique_basename {
    my ($entry) = @_;
    my $blog = $entry->blog;
 #    my $title = $entry->title;
    my $title = '';
#    $title = '' if !defined $title;
#    $title =~ s/^\s+|\s+$//gs;
#    if ($title eq '') {
#        if (my $text = $entry->text) {
#            $title = MT::I18N::first_n_text($text, MT::I18N::const('LENGTH_ENTRY_TITLE_FROM_TEXT'));
#        }
        $title = 'Post' if $title eq '';
#    }
    my $limit = $blog->basename_limit || 30; # FIXME
    $limit = 15 if $limit < 15; $limit = 250 if $limit > 250;
    my $base = substr(dirify($title), 0, $limit);
    $base =~ s/_+$//;
    $base = 'post' if $base eq '';
    my $i = 1;
    my $base_copy = $base;

    my $class = ref $entry; 
    while ($class->count({ blog_id => $blog->id,
                           basename => $base })) {
        $base = $base_copy . '_' . $i++;
    }
    $base;
}

とりあえず、不要なところをコメントアウトした感じで、

    my $title = '';

だけ追加しています。

これで、おうけい。

ただ、今までに投稿した記事の変なベースネームは治りません。なおしたければ、一度、エントリー全てをエクスポートし、再度インポートすればいいのです。

インポート・エクスポートでは、3.x系ではbasenameやtagは消えてしまうので注意が必要ですよ。

  • Kusakabe Youichi2008/05/20 17:16

    全部postにすると、だんだん遅くなるよ。

  • きむらつよし2008/05/23 10:03

    データベースに入ってしまえば関係ないと思います。
    投稿画面でどれだけ遅くなるのか分からないですけど・・・whileループですかね・・・それよりもサーバーの環境に依存するような気がします。

    あと、何故遅くなるのか詳しく教えていただけると、ちょっと嬉しいです。。

関連するエントリー
MovableType
前後のエントリー
Old: links for 2008-04-11
New: links for 2008-04-16