どんだけ放置してるんだよ。とお叱りを受けたとか受けないとか...
そのくらい怠惰なブログでスマンこってす。

さて、表題のとおり某案件の手直しのこと。

これまでは、非表示にしたいエントリーは手動で下書きへ保存していただいておりましたが、ご要望として「1年前の同月までのエントリーを一覧に表示し、それら以外はリストアップしない」というのをいただきました。まあ、アーカイブが無くなる訳ではなく、インデックスに一覧化されないだけなんですが。

さて、ブログの設定でアーカイブの設定を365日を設定すればヨロし。なーんて安易に考えておりましたら、例えば10月25日の記事をポストすると1年前の10月26日以降の記事が表示されて10月1日から25日までが非表示になる。かといって365日より大きい数字にすると場合によっては9月のエントリーまで表示される場合があることに気がつきました。それならば条件分岐で設定することになりますね。

以前のエントリーで今日以降のブログ記事を非表示にする事例を書きました。これと同様の方法で1年前の同月以降を表示させます。


<MTSetVarBlock name="this_month"><$MTDate format="%Y%m"$></MTSetVarBlock>
<MTSetVarBlock name="last_year"><mt:GetVar name="this_month" op="-" value="101"></MTSetVarBlock>
<MTArchiveList archive_type="Individual">
<MTUnless name="prev">
<MTSetVarBlock name="todays_month"><$MTArchiveDate format="%Y%m"$></MTSetVarBlock>
<MTIf name="todays_month" gt="$last_year"><mt:Entries sort_order="ascend" unique="1">
<mt:EntryDate Format="%Y年 %B月 %e日">:
<a href="<mt:EntryPermalink>"><mt:EntryTitle remove_html="1"></a>
</mt:Entries>
</MTIf>
</MTUnless>
</MTArchiveList></table>

まず、Mt:SetVarBlockで今月(this_month)を定義します。例えば2012年10月なら「201210」となります。
続いて、1年前の同月よりも前(last_year)を定義します。2012年10月の前年同月より前なら2011年9月「201109」となります。これはmt:GetVarタグでop変数を使用して計算します。this_monthから得られた201210から前年の更に前月を得るには、「201210−201109=101」ということで101減じます。すなわち2行目の「<mt:GetVar name="this_month" op="-" value="101">」において計算します。mt:ArchiveListタグをmt:Ifで条件設定し表示されるエントリーを絞り込みます。これで、一覧化されるエントリーの起点が設定できました。

必要なら終点となる条件分岐を設定するれば、任意の期間のエントリーのみを出力できます。