MovableType
記事一覧ページで会計年度別に表示する方法
YYYY年3月期でコンテンツをmtevalモディファイアも用いないで分類したい。
前回では、mtevalモディファイアも用いてシンプルに実装をしました。 今回はmtevalを使用せず、より基本的な使い方で実現できる方法をご紹介します。
MovableType、PowerCMSで動作します。
■ 2021年3月期
-- yyyy年mm月dd日 決算短信
-- yyyy年mm月dd日 有価証券報告書
■ 2020年3月期
-- yyyy年mm月dd日 決算短信
サンプルテンプレート
記事に登録されているコンテンツの公開日を元に、会計年度別の表示を行います。
<mt:Entries lastn="0">
<mt:ignore>04/01以降の記事は次会計年度として扱います。</mt:ignore>
<mt:EntryDate format="%Y" setvar="archive_year">
<mt:EntryDate format="%m" setvar="if_entrydate_md">
<mt:if name="if_entrydate_md" ge="04">
<mt:Var name="archive_year" op="+" value="1" setvar="archive_year">
</mt:if>
<mt:ignore>会計年度を配列に格納します。</mt:ignore>
<mt:SetVar name="push(years)" key="$archive_year">
<mt:ignore>コンテンツ部分:key-記事の順番,value-記事の内容</mt:ignore>
<mt:SetVarBlock name="key"><mt:EntryDate format="%Y%m%d%H%M%S"><mt:EntryID zero_pad="10"></mt:SetVarBlock>
<mt:SetVarBlock name="value">
<tr>
<th><mt:EntryDate format="%Y年%m月%d日"></th>
<td><mt:EntryTitle></td>
</tr>
</mt:SetVarBlock>
<mt:ignore>会計年度ごとの配列を作成します。</mt:ignore>
<mt:SetVar name="$archive_year" key="$key" value="$value">
</mt:Entries>
<mt:ignore>会計年度を出力します。</mt:ignore>
<mt:Loop name="years" sort_by="key reverse">
<section>
<h2><mt:Var name="__key__">年3月期</h2>
<table>
<tbody>
<mt:ignore>会計年度別の値を出力します。</mt:ignore>
<mt:Var name="__key__" setvar="loop_entries">
<mt:Loop name="$loop_entries" sort_by="key reverse">
<mt:Var name="__value__">
</mt:Loop>
</tbody>
</table>
</section>
</mt:Loop>
解説
MTEntryDate タグで公開日を取得し「年」と「月日」部分をそれぞれ変数に格納します。
格納された値が「04」より多い場合は、「年」の値に1を足し、次会計年度で変数の上書きを行い、配列「years」に追加します。push対象をkeyとすることで、重複する値は登録されません。
<mt:Entries lastn="0">
<mt:ignore>04/01以降の記事は次会計年度として扱います。</mt:ignore>
<mt:EntryDate format="%Y" setvar="archive_year">
<mt:EntryDate format="%m" setvar="if_entrydate_md">
<mt:if name="if_entrydate_md" ge="04">
<mt:Var name="archive_year" op="+" value="1" setvar="archive_year">
</mt:if>
<mt:ignore>会計年度をに格納します。</mt:ignore>
<mt:SetVar name="push(years)" key="$archive_year">
・・・省略・・・
</mt:Entries>
会計年度毎に表示したいコンテンツ部分をMTSetVarBlockタグ(value) で指定し、 コンテンツ順番をMTSetVarBlockタグ(key) で指定します。
順番は同日同時間で公開された場合に、keyが上書きされ記事が欠落しないように記事IDをzero_pad モディファイアで0で埋めて、10桁登録とします。(10桁もいらない気もするが)
<mt:Entries lastn="0">
・・・省略・・・
<mt:ignore>コンテンツ部分</mt:ignore>
<mt:SetVarBlock name="key"><mt:EntryDate format="%Y%m%d%H%M%S"><mt:EntryID zero_pad="10"></mt:SetVarBlock>
<mt:SetVarBlock name="value">
<tr>
<th><mt:EntryDate format="%Y年%m月%d日"></th>
<td><mt:EntryTitle></td>
</tr>
</mt:SetVarBlock>
・・・省略・・・
</mt:Entries>
ここがテンプレートの肝となる部分です。
SetVarタグのnameに、会計年度(変数archive_year)を指定し、 代入するkeyとvalue値に、上記で作成したコンテンツの変数keyと変数valueを指定します。
<mt:Entries lastn="0">
・・・省略・・・
<mt:ignore>会計年度ごとの配列を作成します。</mt:ignore>
<mt:SetVar name="$archive_year" key="$key" value="$value">
</mt:Entries>
これで、会計年度ごとの配列が完成しました。
最後に配列に格納した「会計年度」をMTLoop タグで実行し、配列に格納した「会計年度」の名前でMTLoop タグを実行すると、会計年度別にコンテンツが表示できます。
<mt:ignore>会計年度を出力します。</mt:ignore>
<mt:Loop name="years" sort_by="key reverse">
<section>
<h2><mt:Var name="__key__">年3月期</h2>
<table>
<tbody>
<mt:ignore>会計年度別の値を出力します。</mt:ignore>
<mt:Var name="__key__" setvar="loop_entries">
<mt:Loop name="$loop_entries" sort_by="key reverse">
<mt:Var name="__value__">
</mt:Loop>
</tbody>
</table>
</section>
</mt:Loop>
余談
mtevalモディファイアを使用する方法はこちらです。