firstAudience : Website Design & Development

インデックスや一覧のMTEntries内で、
n日以内に更新されたエントリーだけに、NEWマークを表示する

Movable Type 4-5 | Apr 16, 2011

MTの一覧でNEWマークを表示する方法です。

手順

比較的単純な方法としては、days モディファイアと unique モディファイルを併用する方法があります。

days モディファイアと unique モディファイルを併用する方法

たとえば5日以内のエントリーにNEWマークを表示したい場合には

<MTEntry days="5">~5日以内のエントリーが出力。NEWマークのタグを付与~ </MTEntries>
<MTEntry unique="1">~上記で扱われたエントリーを除いた出力~ </MTEntries>

しかし、一覧ページの分割プラグインなどを使っている場合には、上記の方法が通用しない場合があります。

そこで、MTIfタグの条件分岐を使ってNEWマークを表示するアイデアです。

MTIfタグの条件分岐を使ってNEWマークを表示

(ご利用は自己責任でお願いします)

<$MTDate format="%Y" setvar="current_year"$>
<$MTDate format="%j" setvar="past_date"$>
<$MTEntryDate format="%Y" setvar="entry_year"$>
<$MTEntryDate format="%j" setvar="entry_date"$>

<MTIf name="current_year" gt="$entry_year">
	<$MTSetVar name="past_date" op="+" value="365"$>
<MTElseIf name="current_year" lt="$entry_year">
	<$MTSetVar name="entry_date" op="+" value="365"$>
</MTIf>
<$MTSetVar name="past_date" op="-" value="$entry_date"$>
<MTTemplateNote value="デバッグ用"><MTIgnore><$MTVar name="past_date"$>-<$MTVar name="entry_date"$>=<$MTVar name="past_date"$></MTIgnore>
<MTIf name="past_date" le="5">
	NEWマーク
</MTIf>
一部修正(2011/4/25)すみません、変数past_dateの配置にミスがありました。

キーポイントは日付テンプレートタグの format モディファイア %j です。
%j は年初からの日を、3桁の数字で表示しますので、この値を取れば、単純計算で各エントリーから本日(最新の再構築日)までの経過日数を割り出すことが出来ます。
これに年をまたぐ場合の処理を加え、
最後に希望の日数で判別をかければOKです。

※閏年から年をまたぐ場合の処理は、上記のコードには入れていません。(NEWマークの表示が1日長くなります。)

参考にさせていただいた情報
%jの使い方を参考にさせていただきました。
MTタグで自動で消える"New"マークを表示する | 石輪っぷり! | 有限会社 Willさんいん