現在のカテゴリのアクティブ表示
久しぶりにMT案件。自分では全くやろうと想わなかったけど、メニューで現在いるカテゴリをアクティブ表示させたいというご要望が。
まずサブカテゴリが無い場合。サブカテゴリが無ければ割と簡単なんだけど…。
カテゴリ・アーカイブ
ブログ記事リスト(カテゴリ)で以下の設定をする。現在のページのカテゴリ表示名とカテゴリIDをそれぞれ取得。
<MTSetVarBlock name="category_name"><$MTCategoryLabel$></MTSetVarBlock> <MTSetVarBlock name="category_id"><$MTCategoryID$></MTSetVarBlock>
サイドメニューとかカテゴリリストを表示させたい箇所に以下を記述。 class=”current”でアクティブ表示を実現。現在のページのカテゴリとメニューのカテゴリのカテゴリIDを比較して同じだったら<li>にclass=”current”を付与。
<MTIfArchiveType archive_type="Category"> <ul> <MTCategories> <MTSetVarBlock name="menucategory_id"><$MTCategoryID$></MTSetVarBlock> <li<MTIf name="category_id" eq="$menucategory_id"> class="current"</MTIf>><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryLabel$>"><$MTCategoryLabel$></a></li> </MTCategories> </ul> </MTIfArchiveType>
エントリ・アーカイブ
ブログ記事で以下の設定をする。現在のページのエントリIDとエントリが属するカテゴリIDをそれぞれ取得。
<MTSetVarBlock name="page_id"><$MTEntryID$></MTSetVarBlock> <MTEntryCategories> <MTSetVarBlock name="category_id"><$MTCategoryID$></MTSetVarBlock> </MTEntryCategories>
表示させたい箇所に以下を記述。現在のページのカテゴリとメニューのカテゴリのカテゴリIDを比較して同じだったら<li>にclass=”current”を付与し、そのカテゴリのエントリを表示。
現在のページのエントリIDとメニューのエントリのエントリIDを比較して同じだったら<li>にclass=”on”を付与。
<MTIfArchiveType archive_type="Individual"> <ul> <MTCategories> <MTSetVarBlock name="category_name"><$MTCategoryLabel$></MTSetVarBlock> <MTSetVarBlock name="menucategory_id"><$MTCategoryID$></MTSetVarBlock> <li<MTIf name="category_id" like="$menucategory_id"> class="current"</MTIf>><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryLabel$>"><$MTCategoryLabel$></a> <MTIf name="category_id" like="$menucategory_id"> <MTEntries lastn="5"> <MTSetVarBlock name="menu_id"><$MTEntryID$></MTSetVarBlock> <MTEntriesHeader><ul></MTEntriesHeader> <li<MTIf name="page_id" like="$menu_id"> class="on"</MTIf>><a href="<$MTEntryPermalink$>" title="<$MTEntryExcerpt convert_breaks="1" words="20"$>"><$MTEntryTitle$></a></li> <MTEntriesFooter></ul></MTEntriesFooter> </MTEntries> </MTIf> </li> </MTCategories> </ul> </MTIfArchiveType>
カテゴリ・アーカイブ(サブカテゴリあり)
サブカテゴリのある場合をやってみる。カテゴリーをリスト化して表示するときはこんな感じ。
<MTTopLevelCategories> <MTSubCatIsFirst><ul class="catlist"></MTSubCatIsFirst> <mt:IfNonZero tag="MTCategoryCount"> <li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><$MTCategoryLabel decode_html="1" remove_html="1"$></a> <mt:Else> <li><$MTCategoryLabel decode_html="1" remove_html="1"$> </mt:IfNonZero> <$MTSubCatsRecurse max_depth="5"$> </li> <MTSubCatIsLast></ul></MTSubCatIsLast> </MTTopLevelCategories>
これを基本に、力技だけどこんな感じでできた。
<MTIfArchiveType archive_type="Category"> <MTSetVarBlock name="category_id"><$MTCategoryID$></MTSetVarBlock> <MTSetVarBlock name="category_description"><$MTCategoryDescription$></MTSetVarBlock> <MTSetVarBlock name="parent_id"><MTParentCategory><MTCategoryID></MTParentCategory></MTSetVarBlock> <MTTopLevelCategories sort_order="descend"> <MTSubCatIsFirst><ul class="catlist"></MTSubCatIsFirst> <MTSetVarBlock name="menucategory_id"><$MTCategoryID$></MTSetVarBlock> <MTSetVarBlock name="parentcategory_label"><MTParentCategory><MTCategoryLabel></MTParentCategory></MTSetVarBlock> <li<MTHasNoParentCategory> <MTIf name="category_description" like="mainCat"> <MTIf name="category_id" like="$menucategory_id"> class="current"</MTIf> <mt:Else> <MTIf name="parent_id" eq="$menucategory_id"> class="current"</MTIf> </MTIf> <mt:Else><MTIf name="category_id" like="$menucategory_id"> class="current"</MTIf></MTHasNoParentCategory>> <a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryLabel$>"><$MTCategoryLabel decode_html="1" remove_html="1"$></a><$MTSubCatsRecurse max_depth="5"$></li> <MTSubCatIsLast></ul></MTSubCatIsLast> </MTTopLevelCategories> </MTIfArchiveType>
以下の場合にclass=”current”が付与されます。
- 親カテゴリが無い→カテゴリの説明に「mainCat」が含まれる→現在のページのカテゴリIDとメニューのカテゴリIDが同じ
- 親カテゴリがある→親カテゴリIDとメニューのカテゴリIDが同じ
- 親カテゴリがある→現在のページのカテゴリIDとメニューのカテゴリIDが同じ
これでは階層が増えた時に対応できない&運営でカバーな部分があるのでもう少しスマートなやり方が欲しいなー。
