MovableTypeでカテゴリ毎でテンプレートを切り替える方法について自分で思うことを。カテゴリ別ブログ記事リストのテンプレートの編集でコード短縮(再帰)、可読性が高いテンプレートタグを記述することについて紹介しています。
ちょっと先日リリースしたAssetExif: MT4Plugins::WEB DESIGN BLOGでHTMLでのギャラリー構築方法を説明する中で紹介したことをこちらでも取り上げてみます。カテゴリ毎でテンプレートを切り替える方法について。
カテゴリ別に見た目を切り替える(テンプレートを切り替える)でもいくつか取り上げられているんだけど、自分でも思いついた方法を。
テンプレート(カテゴリ別ブログ記事リスト)の編集
カテゴリ毎でテンプレートを切り替えるには、テンプレート>アーカイブテンプレート>カテゴリ別ブログ記事リストを編集する。
まず、MTSetVarBlockを使ってトップカテゴリ名だけの変数とすべてのカテゴリ名の二つの変数をセットする。
<MTSetVarBlock name="top_cat_name"><MTTopLevelParent><$MTCategoryLabel$></MTTopLevelParent></MTSetVarBlock> <MTSetVarBlock name="cat_name"><$MTCategoryLabel$></MTSetVarBlock>
これは、カテゴリ別ブログ記事リストのテンプレートでコードの可読性をよくするためにまず、トップカテゴリだけで条件分岐させるため。こうすれば、他の方が後からコード編集する際に把握しやすくなると思う。
<MTIf name="top_cat_name" eq="トップカテゴリ名A"> <$mt:Include module="Another_CategoryA_Contents"$> <MTElseIf name="top_cat_name" eq="トップカテゴリ名B"> <$mt:Include module="Another_CategoryB_Contents"$> <MTElseIf name="top_cat_name" eq="トップカテゴリ名C"> <$mt:Include module="Another_CategoryC_Contents"$> <MTElse> </MTIf>
トップカテゴリからさらにネストしてサブカテゴリ毎でのテンプレートの切り替えは、インクルードモジュールの中で条件分岐させればいい。トップカテゴリと同じ感じでサブカテゴリ下にさらにネストしてカテゴリ作り、同じパターンで条件分岐すればいいことになる。
結局、インクルードするモジュールのネーミングをカテゴリで連想しやすくすれば、管理がとても楽になると思う。例えば、トップカテゴリ>サブカテゴリ>サブカテゴリとした場合、
Top_Sub_Lowerぐらいのモジュール名にしてみるのはどうか。いいんじゃないかなーと。
次に最初にセットしたカテゴリ名の変数を上手く使うことでさらにコードを短くしたりできる。以下はサブカテゴリ毎にAssetイメージのタグ別生成させるコード。
<MTIfIsAncestor child="$cat_name">でカテゴリ名の変数を代入するようにしていて、<MTAssets type="image" tag="$cat_name">のAssetイメージのタグ分類での生成もカテゴリ名の変数を代入できるようにしている。サブカテゴリ同士で同じパターンで内容のみことなるように表示させたいなら、こうすればコードが短くて済む。同じパターンで他にも変数を属性指定できるMTテンプレートタグで使えると思う。
<MTIfIsAncestor child="$cat_name">
<MTAssets type="image" tag="$cat_name">
<MTAssetsHeader>
<ul id="highslide">
</MTAssetsHeader>
<li>
<a class="highslide" href="<$MTAssetThumbnailURL width="600"$>" onclick="return hs.expand(this)"><img src="<$MTAssetThumbnailURL height="100"$>" alt="<$MTAssetLabel$>" height="100" /></a>
<ul id="assetexif">
<$MTAssetExif$>
</ul>
</li>
<MTAssetsFooter>
</ul>
</MTAssetsFooter>
</MTAssets>
</MTIfIsAncestor>
サブカテゴリ同士のローカルナビゲーションも以下のコードのようにMTSubCategoriesで属性categoryを指定することで同階層サブカテゴリでのローカルナビゲーションも作れる。category属性の指定を&top_cat_nameすれば、トップカテゴリが異なるサブカテゴリ同士のローカルナビなんかもこれでOKのような気がする(試してないけど。)
<MTSubCategories category="トップカテゴリ名"> <MTSubCatIsFirst><ul></MTSubCatIsFirst> <li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryLabel$>"><$MTCategoryLabel$></a></li> <MTSubCatIsLast></ul></MTSubCatIsLast> </MTSubCategories>
以上カテゴリ別ブログ記事リストのテンプレートトップでトップカテゴリ名、カテゴリ名を変数にセットすればいろいろとコードを短縮したり、可読性が高いテンプレートタグを記述したりすることができると思います。
使い方のヒント: MT4Plugins::WEB DESIGN BLOGのギャラリー構築方法(HTML)で取り上げています。




コメントする