PowerCMSで各カテゴリごとに年別アーカイブを表示する方法

はい、みなさんこんばんは。
PowerCMSやMTでブログのカテゴリ一覧を表示する機会はどのCMSでもあります。

WordPressは簡単に出せますが、PowerCMSではどうやって出すのか分からなかったので
備忘録として残しておこうと思います。

これでさくっと実装できるんじゃないんですかね!

では早速…

PowerCMSで各カテゴリごとに年別アーカイブを表示する方法

まず前提として、私は各カテゴリ一覧のサイドバーに表示したかったので
デザイン > ウィジェット > ウィジェットテンプレートににsidebar_templateを作成して
ここに記述を行ってます。

みなさんはデザインに合わせて記述場所を変えてください。

【ブログ構造】
+日記(ブログ)
 +カテゴリA
  +子カテゴリA-1
  +子カテゴリA-2
 +カテゴリB
  +子カテゴリB-1
 +カテゴリC
  +子カテゴリC-1

詳しい説明はソースの中に書いたので、理解しながら使ってみてください!

<div class="side">
<div class="category_list">
<h3>カテゴリ一覧</h3>
<ul>
  <mt:TopLevelCategories>
	<li><a href="<mt:CategoryArchiveLink>">
	  <mt:CategoryLabel>  //既に作成済みの親カテゴリが表示されます
	  </a></li>
  </mt:TopLevelCategories>
</ul>
</div>
<!-- ここまで共通表示のジャンル項目 -->


<!-- ここからAカテゴリにのみ表示する項目 -->
<mt:IfIsDescendant parent="日記"> //ブログ名を指定(日本語でOK)	

<div class="category_list">
  <h3>子カテゴリ一覧</h3>
  <ul>
	<mt:SubCategories category="日記"> //ブログ名を指定(日本語でOK)
	  <mt:If tag="CategoryCount" ne="0">
		<li><a href="<mt:CategoryArchiveLink>">//既に作成済みのAカテゴリにぶら下がる子カテゴリが表示されます
		  <mt:CategoryLabel>
		  </a></li>
	  </mt:If>
	</mt:SubCategories>
  </ul>
</div>
	
<!-- ここからAにのみ表示する月別アーカイブの項目 -->
<div class="archive_post">
  <h3>月別アーカイブ</h3>
  <mt:TopLevelParent>
	<mt:ArchiveList type="Yearly" lastn="1">
	  <mt:ArchiveList type="Category-Monthly">
		<mt:ArchiveListHeader> //ここはループしないためheaderでかこんでおきます
		<ul>
		  </mt:ArchiveListHeader>
		  <li><a href="<mt:ArchiveLink>">
			<mt:ArchiveDate format="%Y年%m月">//ここで0000年00月を取得・表示
			(<mt:ArchiveCount>) //ArchiveCountで記事数を取得できます
			</a></li>
		  <mt:ArchiveListFooter> //ここはループしないためfooterでかこんでおきます
		</ul>
		</mt:ArchiveListFooter>
	  </mt:ArchiveList>
	</mt:ArchiveList>
  </mt:TopLevelParent>
</div>

<div class="archive_post">
  <h3>年別アーカイブ</h3>
  <mt:DynamicMTML>
	<mt:SetVarBlock name="parent_cat_label"><mt:TopLevelParent><mt:CategoryLabel></mt:TopLevelParent></mt:SetVarBlock>
	//SetVarBlockは改行せずにかいてね!改行してしまうと動かなくなる可能性があります。
	<mt:Categories><mt:IfCategory name="$parent_cat_label">//所属する親カテゴリの年別のみ取得するよ!
		<mt:ArchiveList type="Category-Yearly" lastn="9999" offset="1">
		  <mt:ArchiveListHeader><ul></mt:ArchiveListHeader>//ここはループしないためheaderでかこんでおきます
			<li><a href="<mt:ArchiveLink>"><mt:ArchiveDate format="%Y年">(<mt:ArchiveCount>)</a></li>//ここで0000年00月を取得・表示
			<mt:ArchiveListFooter></ul></mt:ArchiveListFooter>//ここはループしないためfooterでかこんでおきます
		</mt:ArchiveList>
	  </mt:IfCategory></mt:Categories>
  </mt:DynamicMTML>
</div>
</mt:IfIsDescendant>


</div><!-- .side -->

これで完了です!
みなさんもぜひ行き詰まったらやってみてください~!