メインインデックスでは、最近のコメントを表示するようにしている。これは便利なのだが、古くなると表示されなくなってしまう。すべてのコメントを表示するにはどうしたらいいのか考える。
■ ■ ■
その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)
はじめまして.
ただいまBLOGを構築中でして,
「その2」のような最新コメント表示がしたく,
参考にさせていただきました.
ありがとうございます.
ところが,この方法だと,日時がコメントが投稿された日時じゃなくて,親記事が投稿された日時になってしまうようです.
詳しくはこちらを.
http://watcher.moe-nifty.com/memo/2004/04/__4.html
板汚し失礼いたしました〜.
Posted by: K-EN at January 16, 2005 08:41情報ありがとうございました。
Posted by: n at January 21, 2005 00:51ご指摘の通り,<$MTCommentDate$> は </MTCommentEntry> の後に書いた方がよさそうです。