カテゴリごとに年別アーカイブのリストを出力する

MTQに、「カテゴリごとに、記事の年別アーカイブリストを出力したい」という質問がありました。
この質問に答えます。

1.質問の概要

サイト内の各カテゴリについて、以下のようなマークアップでカテゴリ年別アーカイブリストを出力したいとのことです。

<h3><a href="カテゴリアーカイブリンク先">カテゴリ名</a></h3>
<ul>
  <li><a href="2015年の年別アーカイブリンク先">2015</a></li>
  <li><a href="2014年の年別アーカイブリンク先">2014</a></li>
  <li><a href="2013年の年別アーカイブリンク先">2013</a></li>
  ・・・
</ul>

2.テンプレートの組み方

上記のような出力を得るには、以下のようにテンプレートを組みます。

<mt:TopLevelCategories>
  <mt:If tag="CategoryCount">
    <h3><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></h3>
    <ul>
    <mt:ArchiveList archive_type="Category-Yearly">
      <li><a href="<$mt:ArchiveLink$>"><$mt:ArchiveDate format="%Y"$></a></li>
    </mt:ArchiveList>
    </ul>
  </mt:If>
  <$mt:SubCatsRecurse$>
</mt:TopLevelCategories>

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

2-1.1/11行目

トップレベルのカテゴリから順に繰り返します。

2-2.2/9行目

MTCategoryCountタグで各カテゴリの記事の数を調べ、記事がある(=記事数が0でない)カテゴリだけ、リストを出力します。

2-3.3行目

MTCategoryLabelタグでカテゴリ名を出力し、またMTCategoryArchiveLinkタグでそのカテゴリへのリンクを出力します。

2-4.5/7行目

各カテゴリの年別アーカイブリストを出力するために、MTArchiveListタグを使い、「archive_type="Category-Yearly"」のモディファイアを付加します。
なお、MTArchiveListタグで「archive_type="Category-Yearly"」のモディファイアを使う場合、MTArchiveListタグの単独のブロックだと、すべてのカテゴリ/年別のアーカイブのリストを順に出力する動作になります。
一方、MTTopLevelCategoriesタグのブロックの中など、カテゴリのコンテキストの中でMTArchiveListタグのブロックを実行すると、処理中のカテゴリのみのカテゴリ/年別のアーカイブのリストを出力することができます。

2-5.6行目

MTArchiveDateタグでアーカイブの年を出力し、またMTArchiveLinkタグでそのアーカイブへのリンクを出力します。

2-6.10行目

カテゴリにサブカテゴリがある場合は、カテゴリの階層を1段下って処理を続けます。

MT Cloud Starter Kit
Movable Typeのプラグイン集「MT Cloud Starter Kit」をぜひご利用ください