• Home
  • Movable Type
  • 入れ子になったカテゴリの階層を調べるテンプレート

入れ子になったカテゴリの階層を調べるテンプレート

入れ子になったカテゴリの階層を調べる方法です。

MTSubCategories タグやカテゴリアーカイブに次のテンプレートを入れればOKです。

<$mt:SetVar name="cat_level" value="0"$>
<mt:ParentCategories><$mt:SetVar name="cat_level" op="++"$></mt:ParentCategories>

最初に変数 cat_level を初期化(ゼロを代入)して、MTParentCategories タグ内でインクリメント( +1 )します。これで親カテゴリの数だけ加算されていくので、カテゴリの階層が分かるというわけです。

ちなみに、MTParentCategories タグはトップレベルのカテゴリのコンテキストでも呼ばれ、その場合は MTParentCategories はトップレベルカテゴリである現在のカテゴリを返すようです(ソース未確認)。

試しに、このブログのカテゴリの一覧を、階層付きで表示すると次のようになります。

 [level:1]Movable Type
[level:2]MT Plugins
[level:2]MT Customize
[level:2]Power CMS
[level:2]DynamicMTML
[level:1]WordPress
[level:2]WP Plugins
[level:2]WP Template
[level:1]Web Development
[level:2]XHTML+CSS
[level:2]JavaScript
[level:2]jQuery
[level:2]Git
[level:2]Server
[level:2]Adobe AIR
[level:1]Tool
[level:2]Firefox
[level:2]Web Browser
[level:2]Web Service
[level:3]Google
[level:2]Mac
[level:2]iPhone
[level:2]CMS
[level:3]EC-CUBE
[level:1]Book
[level:1]Diary
[level:2]Design
[level:2]Seminar

これを表示するためのテンプレートは次のようになります。

<mt:SubCategories top="1">
<mt:SubCatisFirst><ul></mt:SubCatisFirst>
<$mt:SetVar name="cat_level" value="0"$>
<mt:ParentCategories><$mt:SetVar name="cat_level" op="++"$></mt:ParentCategories>
<li>[level:<$mt:Var name="cat_level"$>]<$mt:categorylabel$><mt:SubCatsRecurse></li>
<mt:SubCatisLast></ul></mt:SubCatisLast>
</mt:SubCategories>

以上です。