Movable Typeの子カテゴリ別ブログ記事一覧ページで、同じ親カテゴリに属する他の子カテゴリを取得したいことがあったのでその際の方法をメモ。
サンプルコード
例として、以下のようなカテゴリがあるとします。
- カテゴリA(cata)
- カテゴリA-1(cata1)
- カテゴリA-2(cata2)
- カテゴリA-3(cata3)
- カテゴリB(catb)
- カテゴリB-1(catb1)
この子カテゴリ別一覧ページで、同じ親カテゴリに属する他の子カテゴリを表示するには以下のようにします。
<mt:Ignore><!-- 親カテゴリ名を取得 --></mt:Ignore>
<mt:HasParentCategory>
<mt:ParentCategory>
<mt:SetVarBlock name="parentCat"><mt:CategoryLabel></mt:SetVarBlock>
</mt:ParentCategory>
</mt:HasParentCategory>
<mt:Ignore><!-- 親カテゴリの一覧でループ処理 --></mt:Ignore>
<mt:TopLevelCategories>
<mt:SetVarBlock name="thisCat"><mt:CategoryLabel></mt:SetVarBlock>
<mt:Ignore><!-- 現在の親カテゴリと一致する場合のみ子カテゴリの一覧を表示 --></mt:Ignore>
<mt:If name="thisCat" eq="$parentCat">
<ul>
<mt:SubCategories>
<mt:if tag="CategoryCount">
<li>
<a href="<mt:CategoryArchiveLink>"><mt:CategoryLabel></a>
</li>
</mt:if>
</mt:SubCategories>
</ul>
</mt:If>
</mt:TopLevelCategories>
大まかな流れはコード内に記載しているコメント通りですが、現在のカテゴリの親カテゴリを取得して、親カテゴリ一覧のループ内で一致するものを探し、一致した親カテゴリに属する子カテゴリを出力しています。
各子カテゴリ別一覧で確認してみると、以下のように生成されました。
カテゴリA-1,A-2,A-3の一覧ページ
<ul>
<li>
<a href="http://xxxxx/blog/cata/cata1/">カテゴリA-1</a>
</li>
<li>
<a href="http://xxxxx/blog/cata/cata2/">カテゴリA-2</a>
</li>
<li>
<a href="http://xxxxx/blog/cata/cata3/">カテゴリA-3</a>
</li>
</ul>
カテゴリB-1の一覧ページ
<ul>
<li>
<a href="http://xxxxx/blog/catb/catb1/">カテゴリB-1</a>
</li>
</ul>
ちなみにカテゴリAやカテゴリBのなどの親カテゴリのページでは要素は生成されません。
【参考サイト】
- MTParentCategory – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- MTTopLevelCategories – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- MTSubCategories – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
コメントが承認されるまで時間がかかります。