印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType コメント投稿者の URL をダイレクトリンクに

コメント投稿者へのリンクは、デフォルトではコメント CGI 経由のリダイレクトになっている。リダイレクトの場合、マウスをリンクに重ねてもリンク先は分からないので不便。テンプレートに手を加え、投稿者の URL にダイレクトリンクするように変更する。

■ ■ ■

対象は Movable Type 2.661 である。

コメント投稿者へのリンクは、デフォルトでは <$MTCommentAuthorLink$> としてコーディングされている。これは、コメント投稿者が自分の電子メールアドレスを入力した場合はメールアドレスへのリンクを、URL を入力した場合はその URL へのリンクを、投稿者の名前につけるタグである。spam_protect="1" という属性をつけると、メールアドレスへのリンクはされなくなり、スパム対策になる(nlog(n): コメントのメールアドレスを非表示に)。

URL が入力されている場合、その URL へリンクされるが、次のような形の mt-comments.cgi 経由のリダイレクトとなる。

http://nlogn.ath.cx/opentype/mt-comment.cgi?__mode=red&id=124

ここで、「opentype」は Movable Type の CGI へのパスで、コメントの CGI はスパム対策の一環で名前の変更をしてある(nlog(n): コメントスパム対策)。

URL がリダイレクトなので、コメント投稿者の URL を直接知ることができない。マウスをリンクに重ねたときにリンク先が分かるように、直接リンクにしたい。ちょうど calc さんの 学校では教えてくれない数学 の形式にしたいのである。

Individual Archive Template でのコメント投稿者表示部分は、以下のようになっていた。

<MTComments>
<div class="comments-body">
<$MTCommentBody$>
<span class="comments-post">
Posted by:
<$MTCommentAuthorLink show_email="0"$>
at <$MTCommentDate format="%x %H:%M"$>
</span>
</div>
</MTComments>

上の赤い部分を、<MTIfNonEmpty> タグを使って以下のように書き直す。

<MTComments>
<div class="comments-body">
<$MTCommentBody$>
<span class="comments-post">
Posted by:
<MTIfNonEmpty tag="MTCommentURL">
<a href="<$MTCommentURL$>" title="<$MTCommentAuthor$>"><$MTCommentAuthor$></a>
<MTElse>
<$MTCommentAuthor$>
</MTElse>
</MTIfNonEmpty>

at <$MTCommentDate format="%x %H:%M"$>
</span>
</div>
</MTComments>

これでうまくいくはずであった。しかし、何故か <MTElse> が動作してくれない。MT Extensions: MTElse Fix For Plugins の方法で Builder.pm の書き換えを行った(Fenrir's BLog さんが MTElse問題 で日本語訳してくれている)。この方法は、プラグインで新しく導入したタグでも <MTElse> を動作させるものである。<MTCommentURL> はプラグインではなくビルトインのタグなので、MT 2.661 であれば、本来なら動作すべきであろう (<MTCommentURL> タグはバージョン 2.6 で導入された: mtchanges - Revision history for Movable Type)。

MTpath/lib/MT/Builder.pm の 98 行目以降にコードを追加する。

            my($tokens, $uncompiled);
            my $tokens_else;
...
                    $tokens = [ grep $_->[0] ne 'Else', @{ $t->[2] } ];
                    $tokens_else = [ grep $_->[0] eq 'Else', @{ $t->[2] } ];
...
                $ctx->stash('tokens', $tokens);
                $ctx->stash('tokens_else', $tokens_else);

赤色が追加した部分である。これで思った通りの動作をするようになった。

Posted by n at 2004-07-10 23:55 | Edit | Comments (0) | Trackback(2)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
MT3:プチカスタマイズVOL.2
カスタマイズしたこと トップページに表示してあるリーセントエントリーとリーセン... Trackbacked from: Thanks a ton. at November 02, 2004 19:36
コメントのメールアドレスを非表示&URLのダイレクトリンク
 MovableTypeの記事にコメントを頂いた際、コメントの投稿者がメールアド... Trackbacked from: まじっくblog(仮) at September 29, 2005 20:53
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?