エンジニアブログ

エンジニアブログ
MT技術情報

MT4:更新日付順の年別リスト

いたはし 2008年01月10日

皆さんこんばんは、板橋です。
今回は、プラグイン・アーカイブを使わずに更新日順年別リストを作成する方法をご紹介します。
完成時は、以下のようになります。

表示例)

2007年

  • 11月19日 エントリータイトル

  • 11月18日 エントリータイトル

  • 11月14日 エントリータイトル

2006年

  • 12月19日 エントリータイトル

  • 3月12日 エントリータイトル

実際に記述するタグは以下のとおりです。

<MTSetVarBlock name="setThisYear"><$MTDate format="%Y"$></MTSetVarBlock> <MTSetVar name="setEntryYear" value="$setThisYear">

<MTEntries sort_by="modified_on" sort_order="descend">

<MTEntriesHeader>
<h2><MTGetVar name="setEntryYear"></h2>
</MTEntriesHeader>

<MTSetVarBlock name="setEntryYear"><$MTEntryModifiedDate format="%Y"$></MTSetVarBlock>

<MTIf name="setThisYear" ne="$setEntryYear">

</dl>
<h2><MTGetVar name="setEntryYear"></h2>
<dl>
<dt><$MTEntryModifiedDate format="%m月%d日"$></dt>
<dd><$MTEntryTitle$></dd>
<MTSetVar name="setThisYear" value="$setEntryYear">

<MTElse>

<dt><$MTEntryModifiedDate format="%m月%d日"$></dt>
<dd><$MTEntryTitle$></dd>

</MTElse>

</MTIf>

<MTEntriesFooter>
</dl>
</MTEntriesFooter>
</MTEntries>

解説

まずブログの最新更新年をsetThisYearにセットし、setEntryYearにsetThisYearの値をセットします。
例えばブログの最新の更新年が2007年だとしたら、setThisYear、setEntryYearには2007が入ります。

<MTSetVarBlock name="setThisYear"><$MTDate format="%Y"$></MTSetVarBlock> <MTSetVar name="setEntryYear" value="$setThisYear">

次にエントリーの一覧を更新日順に並べます。
sort_byでmodified_onを指定すると更新日順に並びます。

EntriesHeaderで最初のアーカイブ用の見出しを作成します。
最新更新年を出すのでsetEntryYearを出力させます(この時点ではsetThisYearでも構いません)。
※EntriesHeaderタグはEntriesの一番最初に一度だけ中身を出力するタグです。

<h2><MTGetVar name="setEntryYear"></h2>

次に、エントリーの更新年をsetEntryYearにセットします(後ほど比較対象に使います)。

<MTSetVarBlock name="setEntryYear"><$MTEntryModifiedDate format="%Y"$></MTSetVarBlock>

<MTIf name="setThisYear" ne="$setEntryYear">でsetThisYearとsetEntryYearの値を比べます。
setThisYearの値とsetEntryYearの値が同じでない場合、次行からMTElseまでの処理を行います。

次行からMTElseまでの処理は、一度リストを切って、見出しを追加するよう処理してます。
例えばsetThisYearが2007で、setEntryYearが2006の場合、一度リストが終了し、2006年の見出しが入ります。そのあとまたリストが作成されます。

MTElse内の処理は、setThisYearとsetEntryYearの値が同じだった場合、次行から</MTElse>までを処理します。
同じ年である限り、同じリスト内に行が追加されていきます。

日別、月別にしたい場合は、setThisYear、setEntryYearのformatを%dにすれば日別に、%mにすれば月別になります。
modified_onを指定しなければ、作成日順に並びます。
古い順にしたい場合は、sort_orderをascendにしてください。