最近のコメント/トラックバックをエントリーとともに表示するプラグイン

2005年6月23日 改良版を公開しましたので、そちらのエントリーも合わせてお読みください

みよたんさんのBlog「Magic White」のこちらのエントリーに、以下のような話が出ていました。

「MTEntriesタグの『recently_commented_on』で最近のコメントを表示すると、意図しない古いコメントが表示されてしまうことがある。」

確かに、言われてみればその通りです。

その解決法として、MTCollateプラグインを使う方法が紹介されていました。ただ、それだとタグが複雑になります。
そこで、最近のコメント/トラックバックを、エントリーとともに表示するプラグインを作ってみました。

プラグインのダウンロードとインストール

こちらをクリックしてプラグインのページを開き、その内容をすべてコピーして、メモ帳等に貼り付けてください。
そして、そのファイルに「Recents.pl」という名前をつけて保存し、Movable Typeの「plugins」ディレクトリにアップロードしてください。

追加されるテンプレートタグ

このプラグインをインストールすると、以下のテンプレートタグが追加されます。

・MTCommentsRecent/MTPingsRecent
最近のコメント/トラックバックを、エントリーとともに出力するコンテナタグです。以下のアトリビュートを指定することができます。

lastn="○" 最近の○件のコメント/トラックバックを出力します。
entry_sort_order ="desend|ascend" 出力されるエントリーを並べ替える順序を指定します。
descendを指定すると、出力対象のエントリーのうち、最近コメントがついたエントリーから順に表示します。
一方、ascendを指定すると、出力対象のエントリーのうち、最近コメントがついたエントリーが後になるように表示します。
省略すると、descendを指定したものとします。
comment_sort_order ="descend|ascend" 各エントリーに対するコメントを並べ替える順序を指定します。
指定しない場合は、Movable Typeの設定画面の「コメントを並べる順番」に従います。
ping_sort_order ="descend|ascend" 各エントリーに対するトラックバックを並べ替える順序を指定します。
指定しない場合は、最近のトラックバックから順に表示します。

・MTCommentsRecentIfEntry/MTPingsRecentIfEntry
次に出力するものがエントリーかどうかを判断する条件タグです。
エントリーである場合は、MTEntry○○タグでエントリーの情報を出力します。

・MTCommentsRecentIfComment
次に出力するものがコメントかどうかを判断する条件タグです。
コメントである場合は、MTComment○○タグでコメントの情報を出力します。

・MTPingsRecentIfPing
次に出力するものがトラックバックかどうかを判断する条件タグです。
トラックバックである場合は、MTPing○○タグでトラックバックの情報を出力します。

・MTCommentsRecentEntryHeader/MTPingsRecentEntryHeader
一連のエントリーの中で、最初のエントリーかどうかを判断する条件タグです。

・MTCommentsRecentEntryFooter/MTPingsRecentEntryFooter
一連のエントリーの中で、最後のエントリーかどうかを判断する条件タグです。

・MTCommentsRecentHeader/MTPingsRecentHeader
各エントリーに対するコメント/トラックバックの中で、最初のものかどうかを判断する条件タグです。

・MTCommentsRecentFooter/MTPingsRecentFooter
各エントリーに対するコメント/トラックバックの中で、最後のものかどうかを判断する条件タグです。

使用例

・例1
最近の10件のコメントをエントリーとともに箇条書きにし、エントリーは最近コメントがついたものから順にして、個々のエントリーへのコメントは古いものから順に表示する。

<ul>
<MTCommentsRecent lastn="10" comment_sort_order="ascend">
<MTCommentsRecentIfEntry><li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>(<$MTEntryDate$>)</MTCommentsRecentIfEntry>
<MTCommentsRecentIfComment>
<MTCommentsRecentHeader><ul></MTCommentsRecentHeader>
<li><$MTCommentAuthorLink$>(<$MTCommentDate$>)
<MTCommentsRecentFooter></ul></li></MTCommentsRecentFooter>
</MTCommentsRecentIfComment>
</MTCommentsRecent>
</ul>

・例2
最近の10件のトラックバックをエントリーとともに箇条書きにし、エントリーは最近コメントがついたものから順にして、個々のエントリーへのトラックバックは古いものから順に表示する。

<ul>
<MTPingsRecent lastn="10" ping_sort_order="ascend">
<MTPingsRecentIfEntry><li><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a>(<$MTEntryDate$>)</MTPingsRecentIfEntry>
<MTPingsRecentIfPing>
<MTPingsRecentHeader><ul></MTPingsRecentHeader>
<li><a href="<$MTPingURL$>"><$MTPingTitle$></a>(<$MTPingDate$>)
<MTPingsRecentFooter></ul></li></MTPingsRecentFooter>
</MTPingsRecentIfPing>
</MTPingsRecent>
</ul>