[MovableType] <Enties>のカテゴリー分岐や記事の子カテゴリーの取得方法

記事一覧や記事詳細を表示する際に子カテゴリーを取得する方法の備忘録

選択しているカテゴリーが1つだけなら特に悩むことなく %lt;$mt:CategoryLabel$> で表示できるが、親カテゴリーと子カテゴリーの両方を選択している場合などいろいろな場合があるので、そういった場合の対処法も含めて。

まず下記のカテゴリーがあるとしよう

・カテゴリーA
 ・カテゴリーAA
 ・カテゴリーAB
 ・カテゴリーAC

・カテゴリーB
 ・カテゴリーBA
 ・カテゴリーBB

・カテゴリーC
 ・カテゴリーAC

・カテゴリーD/A

カテゴリー選択が1つのみの場合

カテゴリー選択が1つのみの場合は、特に難しく考えず下記の様に記述すればいい。

<div class="mb050">
//記事一覧の場合
<mt:EntryCategories>
<$mt:CategoryLabel$>
</mt:EntryCategories>

//記事詳細の場合
<$mt:CategoryLabel$>
</div>

親カテゴリー、子カテゴリー共に選択した場合の子カテゴリーの取得

選択されたカテゴリーを取得するには、何の問題もないが、子カテゴリーのみを取得する場合は下記の様に「SetVarBlock」タグを使い取得する

//SetVarBlockタグで選択された親カテゴリーを取得し変数(primarycat)に格納
<mt:SetVarBlock name="primarycat"><mt:EntryPrimaryCategory><$mt:CategoryLabel$></mt:EntryPrimaryCategory></mt:SetVarBlock>

//SetVarBlockタグで作ったprimarycat変数を使い<mt:IfIsDescendant>を使用し選択されているカテゴリーに親カテゴリーがあるか判定し、あれば<$mt:CategoryLabel$>を返す
<mt:EntryCategories><mt:IfIsDescendant parent="$primarycat"><$mt:CategoryLabel$></mt:IfIsDescendant></mt:EntryCategories></mt:SetVarBlock>

「SetVarBlock」タグや「IfIsDescendant」タグを知っていれば、そこまで難しくないはず。
「IfIsDescendant」タグリファレンス

Entriesタグで条件分岐

記事一覧で特定のカテゴリーなどを取得する場合は、通常カテゴリーアーカイブを使えば一気に解決するが、トップページなどに特定のカテゴリー(子カテゴリー含む)の新着5件を表示したりする場合があると思います。
そんな場合は下記の様に記述します。

//カテゴリーAの記事を取得する場合([include_subcategories]は子カテゴリーを含めるかどうかの判定、含める場合は"1"、デフォルトは"0")
<mt:Entries category="カテゴリーA" include_subcategories="1">
…
</mt:Entries>

//複数カテゴリーを取得する場合(AND、OR、NOTが指定できる)
<mt:Entries categories="カテゴリーA AND カテゴリーB" include_subcategories="1">
…
</mt:Entries>

//子カテゴリーを取得する場合
<mt:Entries categories="カテゴリーAB" include_subcategories="1">
…
</mt:Entries>

//子カテゴリーを取得する場合(カテゴリーACの様に親カテゴリーが違うが同名の子カテゴリーが存在する場合)
<mt:Entries categories="カテゴリーA/カテゴリーAC" include_subcategories="1">
…
</mt:Entries>

//カテゴリーに半角スラッシュが含まれている場合
<mt:Entries categories="[カテゴリーD/A]" include_subcategories="1">
…
</mt:Entries>

この様にいろいろな条件分岐をして記事一覧を取得することができる。
また、[tag]、[tags]モディファイアも[category]、[categories]モディファイアと同じ使い方ができる。

他にも[Entries]タグでいろいろな条件分岐ができるので、一度タグリファレンスを確認してみるのもいいでしょう。
「Entries」タグリファレンス

コメントを残す

メールアドレスが公開されることはありません。