top

最近のコメントのみエントリーごとにまとめて表示(MT4~)

最近のコメントには以前からrecently_commented_onモディファイアがあるので、それで問題なく表示できます。
以下は「最近コメントのあった記事を5件表示し、その記事に属するコメントを5件表示させる」もっともスタンダードな方法です。

<MTEntries recently_commented_on="5">
<MTEntriesHeader><dl></MTEntriesHeader>
<dt><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></dt>
<MTComments lastn="5">
<dd><a href="<$MTEntryPermalink$>#c<$MTCommentID$>"><$MTCommentAuthor$></a> (<$MTCommentDate format="%y/%m/%d"$>)</dd>
</MTComments>
<MTEntriesFooter></dl></MTEntriesFooter>
</MTEntries>

が、よく考えてみたら、これも「最近コメントのあった記事に所属するコメント」になっており、必ずしも「最近のコメントだけ」にはなってないです。コメントの付き具合によっては、古いコメントが表示されている記事もあるのに新しいコメントが隠れている記事もある、という状態になることがあります。

ただ、コメントの場合は「最近のコメント」が主なのか、「最近コメントのついた記事」が主なのかによって意味が少し違ってくるので、一概にどうとは言えないと思います。トラックバックの場合はトラックバックが主役でエントリーはトラックバックの情報の1つ、という感じですが、コメントになるとむしろエントリーが主役で、最近のコメントの役割は「最近のコメントを表示する」というよりは、「最近コメントの付いたエントリーがどれなのか知らせる」ことじゃないかという気もしてるからです。その目的ならrecently_commented_onで十分用は足せます。

しかしブログの目的や考え方・好みによっては「本当の意味での最新のコメントを表示させたい」という場合もあると思います。そういう場合のために「最近のコメントだけをエントリーごとにまとめて表示する」方法も覚え書きしておきます。

■案1:最近のコメントを指定した数だけエントリーごとにまとめて表示する
タグの見本は以下。最近のトラックバック(5) エントリーごとにまとめて表示・改2(MT4版)とパターンは同じです。赤字の部分で表示したいコメントの件数を指定します。

<MTSetVar name="cmcount" value="20">
<MTComments lastn="$cmcount"><MTCommentsFooter><MTSetVarBlock name="lastcm"><MTCommentDate format="%Y%m%d%H%M"></MTSetVarBlock></MTCommentsFooter></MTComments>
 
<MTComments lastn="$cmcount">
<MTCommentsHeader><dl></MTCommentsHeader>
<MTCommentEntry>
<MTSetVarBlock name="thiseid">-<$MTEntryID$>-</MTSetVarBlock>
 
<MTUnless name="cmid" like="$thiseid">
<dt><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></dt>
<MTComments>
<MTSetVarBlock name="thiscm"><MTCommentDate format="%Y%m%d%H%M"></MTSetVarBlock>
<MTIf name="thiscm" ge="$lastcm">
<dd><a href="<$MTEntryPermalink$>#c<$MTCommentID$>"><$MTCommentAuthor$></a>(<$MTCommentDate format="%y/%m/%d"$>)</dd>
</MTIf>
</MTComments>
</MTUnless>
 
<MTSetVarBlock name="cmid"><MTGetVar name="cmid"><MTGetVar name="thiseid"></MTSetVarBlock>
</MTCommentEntry>
<MTCommentsFooter></dl></MTCommentsFooter>
</MTComments>

この方法ですと、コメントの数によってブログ記事の表示件数が左右されます。1つのエントリーに多数のコメントが同時につくと、場合によってはエントリーが1つだけしか表示されなくなる、という可能性もあります(極端な例ではありますが)。

■案2:常に指定した数のブログ記事数を保ち、かつ最新のコメントのみ表示させる
ブログ記事の表示件数を常に一定に保ち、なおかつ新しいコメントのみ表示させるという欲張り(笑)なサンプルです。青字の部分で表示させたいブログ記事の件数を指定します。赤字の部分で表示させたいコメント数の目安を指定します。

<MTSetVar name="ecount" value="5">
<MTComments lastn="20"><MTCommentsFooter><MTSetVarBlock name="lastcm1"><MTCommentDate format="%Y%m%d%H%M"></MTSetVarBlock></MTCommentsFooter></MTComments>
<MTEntries recently_commented_on="$ecount">
<MTEntriesFooter><MTComments lastn="1"><MTSetVarBlock name="lastcm2"><MTCommentDate format="%Y%m%d%H%M"></MTSetVarBlock></MTComments></MTEntriesFooter>
</MTEntries>
<MTIf name="lastcm2" le="$lastcm1">
<MTSetVarBlock name="lastcm"><MTGetVar name="lastcm2"></MTSetVarBlock>
<MTElse><MTSetVarBlock name="lastcm"><MTGetVar name="lastcm1"></MTSetVarBlock>
</MTIf>
 
<MTEntries recently_commented_on="$ecount">
<MTEntriesHeader><dl></MTEntriesHeader>
<dt><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></dt>
<MTComments>
<MTSetVarBlock name="thiscm"><MTCommentDate format="%Y%m%d%H%M"></MTSetVarBlock>
<MTIf name="thiscm" ge="$lastcm">
<dd><a href="<$MTEntryPermalink$>#c<$MTCommentID$>"><$MTCommentAuthor$></a> (<$MTCommentDate format="%y/%m/%d"$>)</dd>
</MTIf>
</MTComments>
<MTEntriesFooter></dl></MTEntriesFooter>
</MTEntries>

説明。
まず、最新から20件目(赤字で指定した件数)のコメントの投稿日時を取得。続いてブログ記事5件目(青字で指定した件数)の最新コメントの投稿日時を求めます。この2つを比較して、最新20件目のコメント日時がブログ記事5件目のコメントより新しい場合は、lastcm変数に古い方をセットします。こうすることで、5件目(最後)のブログ記事には最低でも1つのコメントは表示されるようにしています。

ブログ記事数はrecently_commented_onで指定した数を常に保つようにし、最初に求めたlastcm変数より新しいコメントのみを表示するようにします。これにより、ある記事では古いコメントが表示されるが別の記事では新しいコメントが隠れるということはなくなります。

*表示されるコメント数はコメントの付き具合によって指定した数より多少変動します。

案1、案2とも静・動両方で同じ動作になることを確認しています。

<2008.8.23 修正>記事ID識別記号を全角から半角へ変更。

 

コメント

いつも参考になる記事を有難うございます。

初歩的な質問で申し訳ないのですが、記事を表示した場合に、その”記事に付いた”コメントリストだけをサイドバーなどに表示するには、どうしたら良いのでしょうか?。

つまり、「最近付いたコメント(一覧)」はブログのトップページだけに表示し、個々の記事を開いた時には、他の記事に付いたコメントは省いて、その記事に付いたコメントリンクだけをサイドバーに表示したいのです。

度々済みません。
なんとか自己解決できそうです(^^ゞ。

すみません、しばらく留守にしていたのでお返事遅れました。
…の間に解決されたみたいでよかったです(^^;。

ブログ記事に「その記事に付いたコメントリストだけ」を表示するなら<MTEntries>で囲うのをやめて<MTComments>~</MTComments>だけにすれば出来ると思いますが、そういうことだったのでしょうか。

TAEKO さん、今晩は~。
こちらこそ我ながら初歩的な質問!と思ながら、中々うまく出来なかったので^_^;。

最近コメントをいただくようになって、最初の頃は、コメントの付いていない記事を開いても他のコメントは表示されなかったので昔より賢くなったのかな?と思ってたんですよ。そしたらコメントの付いている記事を開くと、その記事のコメント以外にも他の記事のコメントが表示されてる…。

うちはスタテックなので、そんなことされると再構築しない限り古い記事のコメント内容が最新のみのと内容が違ってしまう訳で、だったら記事にはそれについたコメントだけ表示すれば、新しいコメントが投稿されれば必ず再構築されるので最新。それ以外の記事は関係ないから気にしなくて良い。って結論に。

でも世の中、何故か「最新のコメントを表示する」のトピックは、全てのコメントを表示する方法のようで、そのエントリーだけのコメントをサイドに表示する場合にどうタグを組むのか?。逆に簡単なこと過ぎて?お手本がなかったんです。


ちなみに単純にコメント回りのタグをサイドに持っていっても表示されなかったり、逆に全て表示されてしまったり。
で、もしや?と思小粋空間さんの「http://www.koikikukan.com/archives/2009/01/19-005555.php」をそのままペーストしたら解決してしまいました^_^;。

であとは元々あった「最近のコメントを表示」は<mt:if name="entry_template">で囲って解決…。

基本をもっと勉強しないとダメですね。
お騒がせしてしまって申し訳ありませんでした。
でもまた何かあったらすがりつきます^_^;

ああ、そういうことだったんですか。

>元々あった「最近のコメントを表示」は・・
あれ? デフォルトのテンプレでは「最近のコメント」はトップにしか表示されないようになってますので(最初から<mt:If name="main_index">で囲われている)、デフォ以外のフリーテンプレートなどを参考にされたのかな?

デフォテンプレの構成はMTの再構築の仕様に合わせてあるので、デフォでのサイドバーの使われ方も基本の参考になるのではと思います。