【Movable Type】サブカテゴリを6個ずつ並べる

知らなかったんですが、MTSubCategoriesタグで<$mt:Var name="__counter__"$>って使えなかったんですね…
リストを一定件数ずつ区切って出力するを参考にしました。(そのままともいう)

やりたいこと

  1. 特定のカテゴリのサブカテゴリを表示したい
  2. 6個ずつ並べたい
  3. エントリが1件もないカテゴリは非表示にしたい

ソースコード

<$mt:SetVar name="ctr" value="1"$>
<mt:TopLevelCategories><mt:IfCategory name="機能">
<mt:SubCategories>
<mt:SetVarBlock name="cat_count"><$mt:CategoryCount$></mt:SetVarBlock>
<mt:If name="cat_count" ne="0">
<$mt:SetVar name="mod" value="$ctr"$>
<$mt:SetVar name="mod" op="%" value="6">
<mt:If name="mod" eq="1"><div class="row-fluid"></mt:If>
<div class="span2 borderBox link center mb10">
<a href="<$mt:CategoryBasename$>/"><$mt:CategoryLabel remove_html="1"$></a>
</div>
<mt:If name="mod" eq="0"></div></mt:If>
<$mt:SetVar name="ctr" op="++"$></mt:If>
</mt:SubCategories>
<mt:If name="mod" ne="0"></div></mt:If>
</mt:IfCategory>
</mt:TopLevelCategories>

説明

<$mt:SetVar name="ctr" value="1"$>

変数「ctr」に「1」をセット。
 

<mt:TopLevelCategories><mt:IfCategory name="機能">
<mt:SubCategories>
<mt:SetVarBlock name="cat_count"><$mt:CategoryCount$></mt:SetVarBlock>

「mt:TopLevelCategories」で一番上の階層のカテゴリを取得し、「mt:IfCategory」で絞り込み、「mt:SubCategories」で絞り込んだカテゴリのサブカテを表示させ、記事数を変数「cat_count」に収納。
 

<mt:If name="cat_count" ne="0">

記事数が0以外の時。
 

<$mt:SetVar name="mod" value="$ctr"$>
<$mt:SetVar name="mod" op="%" value="6">

変数「mod」の値に「ctr」の値(初回は1、次からは1ずつ下で増やされていきます)を収納。
変数「mod」を6で割った余りを収納。(この余りの考え方がよく分からなかったのですがコレ読んで納得)
 

<mt:If name="mod" eq="1"><div class="row-fluid"></mt:If>

余りが「1」の時に「<div class="row-fluid">」を出す。
つまり、1・7・13個目…などブロックの開始になります。
 

<div class="span2 borderBox link center mb10">
<a href="<$mt:CategoryBasename$>/"><$mt:CategoryLabel remove_html="1"$></a>
</div>

サブカテの繰り返し部分です。
 

<mt:If name="mod" eq="0"></div></mt:If>

余りが「0」の時に「</div>」を出す。
6・12・18個目…などブロックの終了時になります。
 

<$mt:SetVar name="ctr" op="++"$></mt:If>
</mt:SubCategories>

一通りの処理が終わったら、最後に変数「ctr」に1足します。
ここまでを記事数0以外のカテゴリでループ回します。
「++」はインクリメント演算子(1加算するという意味)というそうです。
 

<mt:If name="mod" ne="0"></div></mt:If>

最後に余りが0(6・12・18個目…)以外の時に、このままだと閉じタグが生成されないので、
ブロックタグの外で待機させます。
 

</mt:IfCategory>
</mt:TopLevelCategories>

一番最後に閉じタグでおしまい。

メモ

演算は必ず、「記事数が0件以外」という条件下で回す。そうしないと全てのカテゴリがカウント対象に。