« ある確率の問題 | メイン | Mac miniだって! »

2005年01月11日

MT画像アップロードのときにalt属性を

MTにささやかな改造を施してみた。画像をアップロードするとき,埋め込みを選択すれば, <img alt="hoge.jpg" src="http:hogehoge.com/mt/archives/images/hoge.jpg" /> などのように alt属性として画像ファイル名を付けてくれる。ファイル名を alt属性にするのが良いのかどうかは議論の余地があるが,とにかく自動でここまでやってくれる。ところが,(サムネイルを作るときはこうすることが多いのだが)ポップアップを選択すると何故かalt属性がつかない。alt属性がなくても表示はされるが,ValidなHTMLにはならないので毎回手書きで追加する羽目になる。これをなんとかしたかった。

例によってPerlまったく知らずに見よう見まねでやっているので,とりあえず動いているものの不安だ。なにをやらかしたのか後で分からなくなると困るので,記録だけはしておこう。

[MT Root]/lib/MT/App/CMS.pm というファイルを開く。Version 3.121-ja だと1862行目に process_post_upload なるサブルーチンらしきものがある(sub process_post_upload とある)。この関数が画像アップロードの処理をしているみたい。下をずっと見ていくと,1946行目に次のような箇所がある。

my $link = $thumb ? qq(<img src="$thumb" width="$thumb_width" height="$thumb_height" />) 

ここが imgタグを作っているところだと推測される。この部分を変更すればよいだろう。この少し下の方を見ると,埋め込みの場合の処理が書いてある。埋め込みの場合はちゃんとalt属性がついているので,その部分を参考にしてみる。埋め込みの場合のコードはこうだ。

    } elsif ($q->param('include')) {
        (my $fname = $url) =~ s!^.*/!!;
        if ($thumb) {
            return <<HTML;
<a href="$url"><img alt="$fname" src="$thumb" width="$thumb_width" height="$thumb_height" /></a>

これを見ると,$fname という変数にURLから切り取ったファイル名を代入しているらしいことが想像される。そこで,1946行目に戻って,その一行上に同じ処理を追加して,さらに imgタグを出力する際に alt属性をつけてみる。結果は次のようになる。

        (my $fname = $url) =~s!^.*/!!;
        my $link = $thumb ? qq(<img alt="$fname" src="$thumb" width="$thumb_width" height="$thumb_height" />) : "View image";

修正したファイルをアップロードすれば完了。

投稿者 sukarabe : 2005年01月11日 22:22

トラックバック

このエントリーのトラックバックURL:
http://njet.oops.jp/cgi/mt/mt-tb-alt.cgi/557

コメント

コメントしてください

comment spam対策のため,名前とメールの入力が必須になっていますが,メールアドレスは公開されません。Web SiteのURLは任意です。Type Key IDをお持ちの方はType Keyをサイン・インしてくださってもいいです。




保存しますか?