Movable Type 4 でカテゴリー別にデザインを切り替える方法(その3)
Movable Type 4 でカテゴリー別にデザインを切り替える方法を、何回かに分けて紹介します。
1.MTIfCategory タグブロック内のサブテンプレートをモジュール化する
カテゴリーアーカイブのデザインを変更する2つめの方法で、MTIfCategory タグブロック内にサブテンプレートをベタ書きするのではなく、MTInclude タグを使います。
カテゴリー1~3
<MTIfCategory name="カテゴリー1">
<$MTInclude module="カテゴリー1"$>
</MTIfCategory>
<MTIfCategory name="カテゴリー2">
<$MTInclude module="カテゴリー2"$>
</MTIfCategory>
<MTIfCategory name="カテゴリー3">
<$MTInclude module="カテゴリー3"$>
</MTIfCategory>
こうすることにより、カテゴリーアーカイブ本体では「どのカテゴリーにどのテンプレートを割り当てるか」という制御に徹することができ、テンプレート全体の見通しがよくなります。
汎用的なデザインを与えたいカテゴリー4~6を新たに追加する場合は、次のようにします。
<MTIfCategory name="カテゴリー1">
<$MTInclude module="カテゴリー1"$>
<MTElse>
<MTIfCategory name="カテゴリー2">
<$MTInclude module="カテゴリー2"$>
<MTElse>
<MTIfCategory name="カテゴリー3">
<$MTInclude module="カテゴリー3"$>
<MTElse>
<$MTInclude module="カテゴリーその他"$>
</MTIfCategory>
</MTIfCategory>
</MTIfCategory>
最初の MTIfCategory タグでカテゴリー1であるかの判定をし、そうでなければ MTElse を実行して、次の MTIfCategory タグでカテゴリー2であるかの判定をします。その繰り返しで、最後のカテゴリー判定にマッチしなかったカテゴリーには一番最後の MTElse タグの内容、つまりデフォルトとなるデザインのテンプレートモジュールを呼び出します。
2.MTIfCategory タグを除去して、モジュール化をさらに簡素化する
さて、すでにお気づきの方もいらっしゃると思いますが、最初のリストは、カテゴリーを識別するキーさえ取得できれば、実は以下の1行で済みます。
<$MTInclude module="カテゴリーを識別するキー"$>
「カテゴリーを識別するためのキー」として、次のようにカテゴリー名を使ってみます。カテゴリー名は、MTInclude タグを実行する前に、MTSetVarBlock タグを使って変数に設定し、変数名をmoduleモディファイアに与えれば、ダイナミックにカテゴリー名を設定することができます。
<mt:setvarblock name="category_name"><$MTCategoryLabel$></mt:setvarblock>
<$MTInclude module="$category_name"$>
これで、このアーカイブが「カテゴリー1」の再構築を行うときには変数 category_name には「カテゴリー1」が、「カテゴリー2」の再構築を行うときには変数 category_name には「カテゴリー2」...という具合に設定され、それぞれ「カテゴリー1」「カテゴリー2」...という名前のテンプレートモジュールを呼び出します。
注意するのは、変数category_nameをmoduleモディファイア(というか、nameモディファイア以外)で使う場合は、変数名の前に大抵「$」をつけておく、ということです。
3.MTIf タグを使ってデフォルトデザインの条件分岐をつける
2つめのリストのように、デフォルトのデザインと振り分けたい場合は、さらに MTIf タグと MTCategoryDescription タグで制御します。この方法は SYSTEM STUDIO さんよりアイデア頂きました。ありがとうございました。
<mt:setvarblock name="category_description"><$MTCategoryDescription$></mt:setvarblock>
<mt:if name="category_description">
<$MTInclude module="$category_description"$>
<mt:else>
<$MTInclude module="デフォルト"$>
<mt:if>
このリストを使う前準備として、各カテゴリーの「カテゴリーの説明」欄に、呼び出したいモジュール名を設定しておきます。デフォルトデザインのモジュールを呼び出したいときには、「カテゴリーの説明」欄には何も設定しません。
そうすれば、MTIf タグの判定で「カテゴリーの説明」欄に記入されている場合に、「カテゴリーの説明」欄に設定された名前のテンプレートモジュールを呼び出します。「カテゴリーの説明」欄に記入していない場合は、「デフォルト」という名前のテンプレートモジュールを呼び出します。
なお、前回もお伝えしたとおり、「カテゴリーの説明」欄を使うよりも、カスタムフィールドを利用した方が妥当に思われます。
- MTEntriesタグのcategoryモディファイアに「AND」を含むカテゴリを指定する
- ブログ記事ページに自分が属するカテゴリのツリーと直属カテゴリの他のブログ記事一覧を表示する
- Movable Type 5でのMTEntriesタグのcategory/catgoriesモディファイアの動作改善について
- 親カテゴリーアーカイブにサブカテゴリーのブログ記事を表示する場合に特定のサブカテゴリーのブログ記事をフィルタリングする
- 特定のカテゴリのブログ記事を表示する
- 親カテゴリページにサブカテゴリページのリンクを表示する
- Movable Type 5(MT5)のカテゴリ削除動作
- sort_method モディファイア(その2)
- sort_method モディファイア(その1)
- Movable Type でカテゴリ別にブログ記事の背景画像を切り替える(カスタムフィールド編)
- Movable Type でカテゴリ別にブログ記事の背景画像を切り替える
- 親カテゴリーアーカイブに表示したサブカテゴリーのブログ記事にサブカテゴリー名を表示する
- ブログ記事のない親カテゴリーに子カテゴリーのブログ記事を表示する(Movable Type 4.25~)
- カテゴリーアーカイブページの最後に「続きを読む」のリンクを表示する
- Movable Type のカテゴリーリストで特定のカテゴリーを非表示にする
- dTree カテゴリーリストにブログ記事数を表示する
- カテゴリークラウド for Movable Type
- カテゴリーの階層別にデザインを切り替える for Movable Type 4
- カテゴリーリストの中に月別カテゴリーリストを表示する
- サブカテゴリーリストを定義型リストでマークアップする
