2003年09月03日(水)
コメント自動リンクの長さ対策の続き
"コメントの自動リンクのtarget指定"で,特にサイド掲示板では自動リンクのURLの部分が長いとデザインが壊れることから,<a>Click!</a>と,URLの部分を「Click」という文字列で置き換えることにしたわけなんですが,これだと別の問題が起こってしまいました.
ということで,今回はその対策.自動リンクの部分をいじってない人にはまったく無縁な問題かもしれませんね・・・.
問題は,コメント内に「http://」で始まるURLを書いて
http://www.heavenwolf.org/
プレビューに飛びます.このURLを以下「$URL」とします.プレビュー表示の段階では,まずここではタグを許可していないのでタグが取り除かれます.まぁ,この例ではタグが入っていませんが.次に「http://」で始まる$URLに自動リンク用のタグが補完され,
<a href="$URL" title="$URL" target="_blank">Click!</a>
という状態になっているわけです.
確認しておきますが,これはリンクのURL部分の長さが気になるから対処したために,「Click!」という文字列になっています.ネイティブ(?)な状態のMTでは,「Click!」の部分にそのまま$URLが入っています.
プレビュー画面ではこれが編集できるようにtextareaに入っている状態ですが,これをそのままプレビューまたはポストすれば,先程と同じように,タグが取り除かれます.するとどうでしょう(笑).
Click!
ありゃ,「Click!」しか残ってない(笑).そりゃそうですよね,タグの中にしか$URLが入っていないわけですから.跡形もなく消えてしまいます.つまり,一度でもプレビューを経由すると,せっかく書いた$URLが消えてしまうわけです.だから,これ以上いくら進んでも,「http://」で始まる文字列が見つからないので,自動リンクは生成されません.
ネイティブ(?)な状態のMTであれば,「Click!」の代わりに$URLが残っているので,再度自動リンクが生成されるわけですが,それでは$URLが長いときにやられちゃいますよね(謎).
ということで,これへの対策.プレビューやポストのときに,タグを取り除いてから自動リンクを生成しているわけですが,タグを取り除く前に,<a></a>タグから$URLを抽出してやって,それからタグを取り除き,その後自動リンクを生成してやります.
具体的には,MTの中で,lib/MT/Util.pmの中の,「munge_comment」を以下のようにしてやりました.
sub munge_comment { my($text, $blog) = @_; unless ($blog->allow_comment_html) { if ($blog->autolink_urls) { $text =~ s!<a href="(http://[^"]*)" .*!$1!g; } $text = remove_html($text); if ($blog->autolink_urls) { $text =~ s!(http://\S+)!<a href="$1" target="_top" title="$1">Click\!</a>!g; } } $text; }
targetは以前は「_blank」だったけど,「_top」に変更.自分のサイトにリンクすることもあるだろうしね.
困りますよね,これ。
まだ試してないんですが,スタイルシートの方で
「overflow: hidden」にして,はみ出るURLを
隠してしまおうかなーとか考えてました。
実力行使というかなんというか。
なんと,スタイルシートにそういう効果を持つものがあったとは,まったく知りませんでした.
たしかにその実力行使もありですね.MTのファイルはいじらずに,スタイルシートを工夫するだけで対処できるから,やりやすいですし.
うーん,スタイルシートは奥が深そうだ・・・.
サイド掲示板設置できました。
HeavenWolf: 新・MTのMTによるMTのためのサイド掲示板 「新・MTのMTによるMTのためのサイド掲示板」 このすぐ前のエントリーで、掲示板が設置できなくてはまってますー(T▽T)とアップしたので…
サイド掲示板をつけました。
“C.K. BBS”と名づけて、“C.K. Harbox”の下に設置しました。 HeavenWolfのriver24(りばにし)さんが作られたものです。…
SIDE BBS
右側にあるSIDEBBSは、HeavenWolfさん作のサイド掲示板って奴を使わせて貰ってるのですが、どうもうまい具合に動作しない所があった。 コメント中にリンクがあったり、コメントした人の名…
SIDE BBSの手直し
右側にあるSIDEBBSは、HeavenWolfさん作のサイド掲示板って奴を使わせて貰ってるのですが、どうもうまい具合に動作しない所があった。 コメント中にリンクがあったり、コメントした人の名…