年別アーカイブページにその年の月別アーカイブリストを出力する

MTQに、「年別アーカイブページにその年の月別アーカイブリストを出力したい」といった内容の質問があがっていました。
この質問に答えてみます。

1.考え方

月別アーカイブリストを出力するには、MTArchiveListタグに「archive_type="Monthly"」のモディファイアを付加します。
この月別アーカイブリストは、テンプレートの種類に関係なく、ブログ全体を対象にしたものになります。

質問された方の希望は、「年別アーカイブページの中では、それぞれの年の月別アーカイブリストだけを出力したい」といった内容です。
例えば、2012年の年別アーカイブページには、2012年1月~2012年12月だけの月別アーカイブリストを出力したいとのことです。

このようなことを行うには、以下のように処理をします。

  1. 出力中の年別アーカイブページで、そのアーカイブページの年を変数に代入します。
    変数名は「archive_year」にすることにします。
  2. MTArchiveListタグで、ブログ全体の月別アーカイブリストを順に取り出します。
  3. MTArchiveListタグのブロックの中で、月別アーカイブの年と、アーカイブページの年とを比較して、両者が一致する時だけ月別アーカイブの情報を出力します。

2.テンプレートの書き方

ここまでの話に沿ってテンプレートを書くと、以下のようになります。

<$mt:ArchiveDate format="%Y" setvar="archive_year"$>
<ul>
<mt:ArchiveList archive_type="Monthly">
  <$mt:ArchiveDate format="%Y" setvar="cur_month_year"$>
  <mt:If name="archive_year" eq="$cur_month_year">
    <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate format="%Y年%m月"></a>(<$mt:ArchiveCount$>)</li>
  </mt:If>
</mt:ArchiveList>
</ul>

テンプレートの内容は以下の通りです。

内容
1行目年別アーカイブページの日付から年(%Y)を取り出し、変数archive_yearに代入します。
3/9行目MTArchiveListタグで、ブログ全体の月別アーカイブリストを順に取り出します。
4行目MTArchiveDateタグで、月別アーカイブの年を取り出し、変数cur_month_yearに代入します。
5行目/7行目MTIfタグで、変数archive_year(年別アーカイブページの年)と、変数cur_month_yearの値(月別アーカイブの年)を比較します。
6行目5行目のMTIf文の条件が成立するときだけ、その月のアーカイブページへのリンクと、その月の記事の件数を出力します。

3.変数や条件判断は必須

Movable Type 5.1 Webサイト製作ガイドVolume 2この例のように、手の込んだ処理をしようとすると、変数や条件判断を避けて通ることができません。
拙著「Movable Type 5.1 Webサイト製作ガイドVolume 2」では、変数や条件判断について、かなり詳しく解説しています。
「変数や条件判断がよく分からない」という方は、ぜひ拙著をお読みください。