【Movable Type】カテゴリ一覧を出力する
概要
管理画面「カテゴリ」で追加されたカテゴリを出力する方法。カテゴリ一覧の出力方法はいくつかあり、用途により使い分けると便利。PowerCMSも同様。
なお、以降の説明においてカテゴリの階層は、とくに記載がなければ以下を前提としています。
また、使用できるモディファイアは、最低限覚えておくとよいもののみ記載しています。
カテゴリA
└カテゴリA-1
└カテゴリA-2
カテゴリB
└カテゴリB-1
└カテゴリB-2
カテゴリC
└カテゴリC-1
└カテゴリC-2
基本構造ととりあえず覚えておくといいモディファイア
カテゴリ一覧の出力方法はいくつかあります。
MTCategories
カテゴリの一覧を表示するためのブロック。カテゴリの階層は関係なく、すべて同列に出力される。表示順も固定(カテゴリ名を基準とした文字コード順の昇順)
何も考えず手っ取り早くカテゴリ一覧を表示させるにはオススメ。
<!-- MT記述 -->
<mt:Categories>
<mt:If name="__first__">
<ul>
</mt:If>
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:If name="__last__">
</ul>
</mt:If>
</mt:Categories>
<!-- HTML出力 -->
<ul>
<li><a href="">カテゴリA</a></li>
<li><a href="">カテゴリA-1</a></li>
<li><a href="">カテゴリA-2</a></li>
<li><a href="">カテゴリB</a></li>
<li><a href="">カテゴリB-1</a></li>
<li><a href="">カテゴリB-2</a></li>
<li><a href="">カテゴリC</a></li>
<li><a href="">カテゴリC-1</a></li>
<li><a href="">カテゴリC-2</a></li>
</ul>
show_empty
1
を指定すると記事が公開されていないカテゴリも出力する。
MTTopLevelCategories
現在のカテゴリに関係なく、最上位のカテゴリ一覧を表示するブロック。アンカーメニューなど、単純に最上位のカテゴリリストのみ表示したい場合はこれが手っ取り早くてオススメ。
<!-- MT記述 -->
<mt:TopLevelCategories>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:TopLevelCategories>
<!-- HTML出力 -->
<ul>
<li><a href="">カテゴリA</a></li>
<li><a href="">カテゴリB</a></li>
<li><a href="">カテゴリC</a></li>
</ul>
リファレンスのページにはとくに記載がないが、以下のMTSubCategories
のモディファイアであるsort_by
とsort_order
が使用できる。
MTSubCategories
現在のカテゴリの子カテゴリを階層化して一覧表示するブロック。上2つで紹介したものより細かい調整ができる。
最上位階層の出力にMTTopLevelCategories
とあわせて使用することが多い。
<!-- MT記述 -->
<mt:TopLevelCategories>
<h2><$mt:CategoryLabel$></h2>
<mt:SubCategories>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubCategories>
</mt:TopLevelCategories>
<!-- HTML出力 -->
<h2>カテゴリA</h2>
<ul>
<li><a href="">カテゴリA-1</a></li>
<li><a href="">カテゴリA-2</a></li>
</ul>
<h2>カテゴリB</h2>
<ul>
<li><a href="">カテゴリB-1</a></li>
<li><a href="">カテゴリB-2</a></li>
</ul>
<h2>カテゴリC</h2>
<ul>
<li><a href="">カテゴリC-1</a></li>
<li><a href="">カテゴリC-2</a></li>
</ul>
top
1
を指定すると、MTTopLevelCategories
と同じ挙動になる。
上記の例を書き換えると以下のようになるが、パッと見てわかりづらいため、最上位のカテゴリを出力したいのであれば、基本的にはMTTopLevelCategories
を使うことをオススメします。
<mt:SubCategories top="1">
<h2><$mt:CategoryLabel$></h2>
<mt:SubCategories>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubCategories>
</mt:SubCategories>
sort_order
昇順(ascend
/ デフォルトの指定)か降順(descend
)を指定する。
category
特定のカテゴリの子カテゴリ一覧を表示したい場合に使用する。指定するのは「カテゴリ名」。
<MTEntries>
のモディファイアとは違い、複数指定することはできない。
このモディファイアを使用する場合、出力時の挙動に注意。
たとえば「特定のカテゴリのみ出力で、親カテゴリを見出し・子カテゴリをリストとして表示」させたい場合、以下のような書き方をすると、意図した出力にならない。
<!-- 想定しているHTML内容 -->
<h2>カテゴリA</h2>
<ul>
<li><a href="">カテゴリA-1</a></li>
<li><a href="">カテゴリA-2</a></li>
</ul>
<!-- MT記述 -->
<mt:TopLevelCategories>
<h3><$mt:CategoryLabel$></h3>
<mt:SubCategories category="カテゴリA">
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubCategories>
</mt:TopLevelCategories>
<!-- 実際に出力されるHTML内容 -->
<h2>カテゴリA</h2>
<ul>
<li><a href="">カテゴリA-1</a></li>
<li><a href="">カテゴリA-2</a></li>
</ul>
<h2>カテゴリB</h2>
<ul>
<li><a href="">カテゴリA-1</a></li>
<li><a href="">カテゴリA-2</a></li>
</ul>
<h2>カテゴリC</h2>
<ul>
<li><a href="">カテゴリA-1</a></li>
<li><a href="">カテゴリA-2</a></li>
</ul>
これは以下の書き方で実装できる(違いは<h2>
見出しの部分)
<mt:SubCategories category="カテゴリA">
<mt:SubCatIsFirst>
<mt:ParentCategory><h2><$mt:CategoryLabel$></h2></mt:ParentCategory>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubCategories>
あるいは
<mt:SubCategories category="カテゴリA">
<mt:SubCatIsFirst>
<mt:TopLevelParent><h2><$mt:CategoryLabel$></h2></mt:TopLevelParent>
<ul>
</mt:SubCatIsFirst>
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubCategories>
MTSubCatsRecurse
MTSubCategories
ブロック内を再帰的に表示する。Markdown的にhtmlタグのみの単純な階層構造の出力の場合は、この書き方がシンプルでいいかもしれない。
<!-- カテゴリ例 -->
カテゴリA
└カテゴリA-1
└カテゴリA-1-1
└カテゴリA-1-2
└カテゴリA-2
└カテゴリA-2-1
└カテゴリA-2-2
<!-- MT記述 -->
<mt:TopLevelCategories>
<h2><$mt:CategoryLabel$></h2>
<mt:SubCategories>
<mt:SubCatIsFirst>
<ul>
</mt:SubCatIsFirst>
<li>
<a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a>
<$mt:SubCatsRecurse$>
</li>
<mt:SubCatIsLast>
</ul>
</mt:SubCatIsLast>
</mt:SubCategories>
</mt:TopLevelCategories>
<!-- HTML出力 -->
<h2>カテゴリA</h2>
<ul>
<li>
<a href="">カテゴリA-1</a>
<ul>
<li><a href="">カテゴリA-1-1</a></li>
<li><a href="">カテゴリA-1-2</a></li>
</ul>
</li>
<li>
<a href="">カテゴリA-2</a>
<ul>
<li><a href="">カテゴリA-2-1</a></li>
<li><a href="">カテゴリA-2-2</a></li>
</ul>
</li>
</ul>
max_depth
再帰的に表示させる階層の数(深さ)を指定する。
1
は直下の子カテゴリまで、2
は孫カテゴリまでを出力する。
一緒に覚えておくといいMTタグ
カテゴリ一覧出力時に一緒に覚えておくといいMTタグたち。
MTCategoryLabel
カテゴリ名を出力する。
MTCategoryBasename
カテゴリのベースネームを出力する。主にCSSで指定するclass名に使用する場合が多い。
MTCategoryDescription
カテゴリ編集画面で入力した説明の内容を出力する。
MTCategoryArchiveLink
カテゴリのアーカイブURL(カテゴリごとのページURL)を絶対URLで出力する。
MTCategoryID
カテゴリのID(数字)を出力する。
MTCategoryCount
カテゴリ毎に、そのカテゴリが指定されている公開されている記事の件数を出力する。単純に記事の件数を表示したり、MTIf
ブロックで記事が存在する場合、ない場合の分岐などに使える。
<!-- 記事が存在する場合にカテゴリ一覧へのリンクを貼る例 -->
<mt:If tag="CategoryCount">
<li><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a></li>
<mt:Else>
<li><$mt:CategoryLabel$></li>
</mt:If>
MTSubCatIsFirst
MTTopLevelCategories
MTSubCategories
内で使用する。ループ出力の一番はじめのときだけ実行されるブロックタグ。
MTSubCatIsLast
MTTopLevelCategories
MTSubCategories
内で使用する。ループ出力の一番最後のときだけ実行されるブロックタグ。
MTTopLevelParent
現在カテゴリの最上位の親カテゴリを表示するブロックタグ。上記の例を参照。
MTParentCategory
現在カテゴリの直上の親カテゴリを表示するブロックタグ。上記の例を参照。
公式リファレンス
すべて掲載しきれないので、大枠のもののみ記載しています。
MT
- https://www.movabletype.jp/documentation/appendices/tags/categories.html
- https://www.movabletype.jp/documentation/appendices/tags/toplevelcategories.html
- https://www.movabletype.jp/documentation/appendices/tags/subcategories.html
- https://www.movabletype.jp/documentation/appendices/tags/subcatsrecurse.html
PowerCMS
- https://www.powercms.jp/products/document/template-tags/categories.html
- https://www.powercms.jp/products/document/template-tags/toplevelcategories.html
- https://www.powercms.jp/products/document/template-tags/subcategories.html
- https://www.powercms.jp/products/document/template-tags/subcatsrecurse.html
Discussion