前回のMTで条件分岐:<MTHasSubCategories>MTカテゴリーページにてサブカテゴリーのみ表示するエントリーでメイン(親)カテゴリーページにてサブカテゴリーのリストを表示する方法を説明しました。今回は、サブカテゴリーページにて同じ階層のサブカテゴリーのみを表示する方法をご紹介します。

カテゴリーページのテンプレートは一つしかなく、わざわざ条件分岐などでややこしく設定するのも面倒なので、一つのテンプレートで複数の表示を可能にしたいものです。
- メインカテゴリー階層ではサブカテゴリーリスト表示
- サブカテゴリー階層では、同じ階層のカテゴリー表示
という前提での説明となります。
上記は、amazonのサイトのメニュー表示と同じ表示扱いになるかと思います。うまく設定することでAmazonのようなメニューを作ることが可能です。
サブカテゴリーページにて同じ階層カテゴリーのメニュー表示
MTでの条件分岐テンプレートタグの<MTHasNoSubCategories>を使います。
MTHasNoSubCategories
現在のカテゴリーにサブカテゴリーが存在しないときだけ実行する条件タグです。
- 対応しているバージョン
- 3.1, 3.2, 3.3, Enterprise 1.0
- 利用方法
- <MTHasNoSubCategories> 〜 </MTHasNoSubCategories>
サブカテゴリーの表示設定をCSSにて処理します。<$MTCategoryBasename$>を使います。
- 関連エントリー:<$MTCategoryBasename$>
- MTでカテゴリ毎にページの表示を変える方法:<$MTCategoryBasename$>
- <$MTCategoryBasename$>を使ってCSSメニュー切り替え表示(2)
表示コード・説明
下記のコードが当ブログで使っているテンプレートコードです。
まず、<MTHasNoSubCategories></MTHasNoSubCategories>は、メインカテゴリ時には表示されません。サブカテゴリーもしくは下の階層にカテゴリーが存在しない時に囲まれたコードが生成・表示されるようになります。(MT条件分岐)
<MTParentCategory><MTCategoryLabel></MTParentCategory>の設定で親カテゴリー名が表示されるようになります。
<MTSubCategories></MTSubCategories>ですべてのカテゴリーメニューを階層表示関係なく表示します。
一番最初のdiv要素と階層表示のli要素にクラス指定で<$MTCategoryBasename$>を設定します。これは、CSSで他のカテゴリーの表示を消すためです。また、表示のカラー変更なども兼ねて設定できます。
例えば、上記のコードで生成されるHTMLコードは、以下の通りになります。
(※MT(メインカテゴリー)>カスタマイズ(サブカテゴリー)で生成されるコードとします。)
- MTカテゴリーのフォルダ名は、"mt"
- カスタマイズカテゴリーのフォルダ名は"custom"
実際には、すべてのメニューが生成されています。これでは、普通のカテゴリーリストとなんら変わりはありません。同じ階層のカテゴリーのみを表示したい場合には、面倒ですが個別にCSSの設定で表示を消します。
上記の参考メニューの場合は、以下のようなパターンのCSSの設定で他のカテゴリー部分が表示されなくなります。
表示コード:CSSパターン
.サブカテゴリファイル名 li.メインカテゴリーファイル名,
.サブカテゴリファイル名 li.メインカテゴリーファイル名,
.サブカテゴリファイル名 li.メインカテゴリーファイル名{
display:none;
}
クラス指定でないとXHTMLValidation Serviceにて引っ掛かります。
上記のようにすべてのサブカテゴリーでの設定をする必要があります。サブカテゴリー×メインカテゴリーの数分のCSSの設定が必要です。条件分岐を使って独自のコードを読み込ませるといった手法もかんがえられますが、あとあとのメンテナンスを考えて管理が難しそうなのでこの方法を使いました。
注意:この方法はCSSが無効である場合はすべてのメニューが表示されてしまいます。
javascriptを使えば、実行可能だと思います。ただ、いじくれないので・・・・・
サブカテゴリーのみを表示する方法をいろいろと探しましたが、静的ページでサブカテゴリーのみの表示はみつかりませんでした。動的ページでは可能のようなエントリーを見かけましたが、当サイトのコンテンツとアクセス数で動的ページにするメリットがまだないので、しばらくSEOを考えての静的ページでのカスタマイズを考えていいこうと思っています。
また何か他にいい方法があれば、コメント下さると助かります。


コメントする