印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableType すべてのコメントを表示する上手い方法は?

メインインデックスでは、最近のコメントを表示するようにしている。これは便利なのだが、古くなると表示されなくなってしまう。すべてのコメントを表示するにはどうしたらいいのか考える。

■ ■ ■

その1: コメントのついた記事をキーにする方法

最近コメントのついた記事をキーとして、指定した個数だけ記事を表示し、各々の記事に対してついたコメントを表示していく方法である。

<ul>
<MTEntries recently_commented_on="5">
<li>
<a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a>
<ul>
<MTComments>
<li><$MTCommentAuthor$> on <a href="<$MTEntryPermalink$>#<$MTCommentID pad="1"$>"><$MTCommentDate format="%x"$></a></li>
</MTComments>
</ul>
</MTEntries>
</ul>

として、recently_commented_on に指定する数を十分に大きく、例えば「1000」などとする。エントリ数より大きくしておけばいい訳だが、あまり美しくはない。エントリの数は増加していくからである。

その2: コメントをキーにする方法

最新のコメントをキーにして、そのコメントがどの記事についているかを表示していく方法である。MTComments タグに sort_order="descend" 属性をつけて、新しい順になるようにしている。

<ul>
<MTComments lastn="5" sort_order="descend">
<MTCommentEntry>
<li>
<a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a>
<ul><li><$MTCommentAuthor$> on <a href="<$MTEntryPermalink$>#<$MTCommentID pad="1"$>"><$MTCommentDate format="%x"$></a></li></ul>
</MTCommentEntry>
</MTComments>
</ul>

「lastn="5"」で指定している数を十分に大きくすればすべてのコメントを表示することができる。ここでの数はコメントの数なので、記事の数より大きいこともあり得る。<MTBlogCommentCount$> を lastn の値として、次の「その3」と同様の方法を使えばできそうである。ただし、記事名を同時に表示することを考えると、1つの記事に複数のコメントがついている場合、記事名が複数出てしまう。

その3: 「その1」の個数を可変にする方法

「その1」では、最新のコメントのついた記事の数を指定しなければならず、その数は予め指定しなければならなかった。しかし、記事の数やコメントの数は変化する。MTTagInvoke プラグインを使えば、記事の個数を可変にすることができる。(コメントのついている記事の数) ≦ (記事の総数) であるから、記事の総数を指定しておけばよいことになる。

<ul>
<MTTagInvoke tag_name="MTEntries">
<MTTagAttribute name="recently_commented_on"><$MTBlogEntryCount$></MTTagAttribute>
<MTTagContent>
<li>
<a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a>
<ul>
<MTComments>
<li><$MTCommentAuthor$> on <a href="<$MTEntryPermalink$>#<$MTCommentID pad="1"$>"><$MTCommentDate format="%x"$></a></li>
</MTComments>
</ul>
</MTTagContent>
</MTTagInvoke>
</ul>

外側の <ul> タグを </MTTagAttribute> の後に置くと、<ul> が消えてしまうので注意が必要。

最適な方法が見つからない。「その3」がやりたいことに一番近いのではあるが…。

このサイトの「すべてのコメント nlog(n) - All Comments」で使っているコードは次の通り。

<MTTagInvoke tag_name="MTEntries">
<MTTagAttribute name="recently_commented_on"><$MTBlogEntryCount$></MTTagAttribute>
<MTTagContent>
<MTEntryCategories>
<a href="<$MTCategoryArchiveLink$>">
<img src ="/mticons/<$MTCategoryLabel$>.gif" border="0" width="80" height="15" alt="<$MTCategoryLabel$>" align="right" /></a>
</MTEntryCategories>
<span style="font-size: x-small"><$MTEntryID pad="1"$></span>
<a href="<$MTEntryPermalink$>" title="<$MTEntryTitle$>"><$MTEntryTitle$></a>
<ul>
<MTComments>
<li><$MTCommentAuthor$> on <$MTCommentDate format="%x"$></a></li>
</MTComments>
</ul>
</MTTagContent>
</MTTagInvoke>

「すべての記事一覧 nlog(n) - All Archives」と同じようにしてみたのだが、少しマヌケになってしまった。

Posted by n at 2004-08-16 00:15 | Edit | Comments (2) | Trackback(2)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
コメントアーカイブの・・・
全コメント・全トラックバック表示の時、 最後x個を表示というように設定しなければいけない。 って感じで。 でも、それ以上になったら困るし←見るのかは別問題として すっきりしないですよね。 そこで・・・。 以下やり方。... Trackbacked from: Hitori-goto at January 02, 2005 22:53
コメントアーカイブの・・・
全コメント・全トラックバック表示の時、 最後x個を表示というように設定しなければいけない。 <MTPings lastn="100">って感じで。 でも、それ以上になったら困るし←見るのかは別問題として すっきりしないですよね。 そこで・・・。 以下やり方。... Trackbacked from: Noel Cafe : Blog at March 11, 2011 21:18
Comments

はじめまして.
ただいまBLOGを構築中でして,
「その2」のような最新コメント表示がしたく,
参考にさせていただきました.
ありがとうございます.

ところが,この方法だと,日時がコメントが投稿された日時じゃなくて,親記事が投稿された日時になってしまうようです.

詳しくはこちらを.
http://watcher.moe-nifty.com/memo/2004/04/__4.html

板汚し失礼いたしました〜.

Posted by: K-EN at January 16, 2005 08:41

情報ありがとうございました。
ご指摘の通り,<$MTCommentDate$> は </MTCommentEntry> の後に書いた方がよさそうです。

Posted by: n at January 21, 2005 00:51
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


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


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


Confirmation Code (必須)


Remember info (R)?