MovableTypeにアップロードするファイル形式に、新しいものを追加する

MovableTypeではデフォルトで「画像」「オーディオ」「ビデオ」というファイル形式が扱える。これは、アップロード時の拡張子で判断を行う。たとえば「画像」ならば記事の作成時に、img要素で出力を行うようにするなど、各形式によって処理の分岐をすることができる。
例えば「.swfはembedで表示したい」など、上記の3つ以外にも処理分岐を作成したい場合は以下の手順でMTのソース本体をいじる。

"/lib/MT/Asset/Flash.pm"の作成

基本的に、Audio.pmというファイルをコピーして作るといい。変更が必要な箇所は下記。

sub extensions { [qr/swf/i] }
sub as_html {
    my $asset = shift;
    my ($param) = @_;
    my $fname = $asset->file_name;
    require MT::Util;
    $text = sprintf(
        #embed要素で出力を行うように変更
        '<embed src="%s" width="100" height="100">',
        MT::Util::encode_html($fname)
    );
    return $asset->enclose($text);
}

関数"extensions"と"as_html"をオーバーライドしている部分と、"class_label_plural"、"class_label"の中身で"Audio"と記述されている箇所を"Flash"と変更すればOK。

"/lib/MT/Asset.pm"にFlash.pmを読みに行かせる

45行目くらいに"MT::Asset::****"を連続してrequireしている箇所があるので、そこに下記の1行を追加。

require MT::Asset::Flash;

日本語化するために"/lib/MT/L10N/ja.pm"を修正

適当に"audio"とかでファイルを検索すると、修正箇所が浮かび上がってくると思うのでそれをよしなに。

"/lib/MT/Core.pm"を修正してクイックフィルタに「フラッシュ動画」の追加

"object_types"を設定するところに、下記の2行を追加

            'asset.flashvideo'=> 'MT::Asset::Flash',
            'flashvideo'      => 'MT::Asset::Flash',

今回は簡単な処理分岐ということで直接MTのソースを触ったけれども、こういうのってプラグインとかのほうが解決しやすいのかな?正直MTはよーわからん。
これを応用して、たとえばアップロードする動画ファイルに一定の処理を加えてしまうとか、画像は透かしを入れるソフトをを通して、とか、拡張子ごとに共通の処理を加えることもできるので、まあ夢がひろがりんぐ、ということで。