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はよーわからん。
これを応用して、たとえばアップロードする動画ファイルに一定の処理を加えてしまうとか、画像は透かしを入れるソフトをを通して、とか、拡張子ごとに共通の処理を加えることもできるので、まあ夢がひろがりんぐ、ということで。