現在のカテゴリのアクティブ表示

MT — Tags: — chimanaco @ 9:27 PM このエントリをはてなブックマークに追加

久しぶりに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が同じ

これでは階層が増えた時に対応できない&運営でカバーな部分があるのでもう少しスマートなやり方が欲しいなー。

0 Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Comments links could be nofollow free.

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2010 chimanaco blog | powered by WordPress with Barecity