top

最近○ヶ月のコメント

この記事の改良版「最近○日のコメント」を公開しました。
日単位で指定できるようになりましたので、今後は改良版を推奨します。

最近のコメントといえば「最新○件のコメント」または「コメントの付いた記事を最新○件」という形で使われるのがふつうかと思います。でもこれだと、コメントがそう頻繁に付かないブログでは古いコメントでも「最新の10件」に含まれてしまって、1年以上前のコメントがサイドバーに表示され続ける…てことがあったりしませんか。そこまでいかなくても、サイト趣旨や目的によっては「最新から10件ではなくて、30日以内に付いたコメントだけを表示したい」みたいなこともあるかもしれません。
実はこことは別のブログがそうで、「最近○ヶ月以内のコメントだけを表示して、○ヶ月以内にコメントがない場合は何も表示されないようにしたいな」と思っていました。で、ちょいと試してみたので覚え書きです。

ここでMTCommentsにMTEntriesのdaysモディファイアみたいなのがあれば簡単なんですが、無いようなので一工夫。javascriptやPHPを使えば出来るのかもしれませんが、今から勉強してる暇はないし、ここはMTタグだけを使って力技(^^;でやってみることに。
とりあえず、今から1ヶ月前、2ヶ月前、みたいに月単位の制御でかまわないので、ブログにアクセスした時から○ヶ月前の日より後に付いたコメントだけを表示するようにしてみました。タグの書き方はいろいろあると思いますが、ここではrecently_commented_onを使って記事ごとにコメントをまとめる形で。

  • 指定した最近○ヶ月以内のコメントだけを表示します。
  • ○ヶ月以内にコメントがない場合は何も表示しません。

■基本:最新1ヶ月のコメント
MTDateでブログにアクセスした日(注)を、例えば2009年5月25日なら20090525という数字にして、単純に100引いたものを1ヶ月前の日付としてます。年が変わる時(1月)だけ8900引いて前年の12月になるようにしてます。青字のところで表示したいエントリ数の最大値を指定してます。

<MTSetVarBlock name="cmmonth"><MTDate format="%m"></MTSetVarBlock>
<MTSetVarBlock name="cmdate"><MTDate format="%Y%m%d"></MTSetVarBlock>
<MTIf name="cmmonth" le="01">
<MTSetVar name="cmdate" value="8900" op="-">
<MTElse><MTSetVar name="cmdate" value="100" op="-">
</MTIf> 
 
<MTEntries recently_commented_on="5">
<MTComments lastn="1"><MTSetVarBlock name="newcm"><MTCommentDate format="%Y%m%d"></MTSetVarBlock></MTComments>
<MTIf name="newcm" ge="$cmdate">
<MTEntriesHeader><dl></MTEntriesHeader>
<dt><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></dt>
<MTComments>
<MTSetVarBlock name="ecmdate"><MTCommentDate format="%Y%m%d"></MTSetVarBlock>
<MTIf name="ecmdate" ge="$cmdate">
<dd><a href="<$MTEntryPermalink$>#c<$MTCommentID$>"><$MTCommentAuthor$></a> (<$MTCommentDate format="%y/%m/%d"$>)</dd>
</MTIf>
</MTComments>
</MTIf>
</MTEntries>
<MTIf name="ecmdate" ge="$cmdate"></dl></MTIf>

*<MTEntriesFooter>の代わりに<MTIf name="ecmdate" ge="$cmdate">で該当コメントがある場合のみ最後の</dl>を出すようにしています。マークアップや装飾はお好みで。
(注)静的では再構築された時点からになります。

■応用:最新○ヶ月のコメント
赤字の部分で何ヶ月前まで表示するか決めてるので、ここを変えれば2ヶ月前、3ヶ月前のコメントも表示できます。2ヶ月前なら、順番に「02」「9000」「200」とすればOK。3ヶ月前なら「03」「9100」「300」ですね。表示する月数を増やせばコメント数も増えるので、recently_commented_on="5"のところを10とか20とか許容できるところまで延ばせばいいかと。あまりたくさん表示されても場所を取るので、そこは適当に最大値を決めればいいと思います。

*最新○ヶ月をリアルタイムで表示したい?
ダイナミック・パブリッシングならリアルタイムでアクセスした瞬間から○ヶ月前のコメントを表示しますが、静的の場合は再構築された日からになるので、多少はタイムラグが生じます。ただ、「だいたい○ヶ月前くらいまで表示されればいい、厳密に正確でなくてもかまわない」なら、頻繁に更新するブログならそれほど気にしなくてもいいのではと。1週間に1回以上更新するなら、タイムラグが生じても1週間程度。それが許容範囲ならかまわないのではと思います。更新頻度が遅くてタイムラグが気になるなら、公開キューを使っても。