これは以前書いた「最近○ヶ月のコメント」の改良版です。MTCommentsでMTEntriesのdaysモディファイアと同じ効果を得るのを目的としています。以前のは強引な力技の上、月単位でしか表示する期間を指定できなかったのですが、今回改良して日単位で表示期間を指定できるようにしました。ので、実用性も少しは上がったかなと思います。
なお、うるう年までは考慮していないので、指定した日数が「年をまたいで前年がうるう年」だった場合、指定した数より1日分多く表示されることになります。が、4年に1回のことでしかも年を超えるまでのわずかな期間なので実用上はさほど影響はないと考えてます。
- 指定した最近○日以内のコメントだけを表示します。
- ○日以内にコメントがない場合は何も表示しません。
■記述例
この例ではrecently_commented_onを使って記事ごとにコメントをまとめる形にしています。
赤字の部分で表示させたい日数を指定します。この例だとアクセスした日(静的生成では再構築した日)から過去10日以内のコメントだけを表示します。
<MTSetVar name="day" value="10">
<MTSetVarBlock name="jday"><MTDate format="%j"></MTSetVarBlock>
<MTSetVarBlock name="cmdate"><MTDate format="%Y%j"></MTSetVarBlock>
<MTSetVar name="cmdate" value="$day" op="-">
<MTIf name="jday" le="$day"><MTSetVar name="cmdate" value="635" op="-"></MTIf>
<MTEntries recently_commented_on="5">
<MTComments lastn="1"><MTSetVarBlock name="newcm"><MTCommentDate format="%Y%j"></MTSetVarBlock></MTComments>
<MTIf name="newcm" gt="$cmdate">
<MTEntriesHeader><dl></MTEntriesHeader>
<dt><a href="<$MTEntryPermalink$>"><$MTEntryTitle$></a></dt>
<MTComments>
<MTSetVarBlock name="ecmdate"><MTCommentDate format="%Y%j"></MTSetVarBlock>
<MTIf name="ecmdate" gt="$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>
考え方とか:
Date formatに「%j」というフォーマットがあるのに気が付いたのが改良のきっかけでした。これは年初めからの日数を3ケタの数字で表示してくれるフォーマットです。なので月に関係なく単純に数字を引くだけで「何日前」か判定することができます。
ただ問題は年をまたぐ場合。年初めからの計算なので、2010年1月1日(001)よりも2009年12月31日(365)の方が数字が大きくなってしまうんですよね。それを解決するために、%Y%jとして、年初めからの日数が指定日数より小さかった場合、さらに635日マイナスすることで調整を図りました。
コメント
でんと | 2010年3月 8日 13:42
初めまして。
MTに関する色々なTips、非常に参考になります。
MTタグだけで色々なことが出来るのですね。
これからもMTに関する記事を楽しみにしています。
TAEKO | 2010年3月 9日 00:20
コメントありがとうございます。
変数が使えるようになってからMTタグの使える幅が広がりましたよね。
思いついたらまた何か書いていきますので、よろしくお願いします。