Movable Type 備忘録
カテゴリごとにテンプレートを切り替える
- Prev Page: DJTRによるフリーフォントで日本語表示する
- Next Page: MTPrecodeプラグイン
こんにちわ^^
もうすっかり春ですねぇ~(●´∀`●)
もうちょっとしたら、待ちに待ったGWです!!
今年のGWは長期休暇取りやすいですよね♪
さて、訪問者さんからカテゴリごとにテンプレートを差し替える方法についてご質問をいただいたので、この場を借りてご紹介します。
ちなみに、わたしのサイトではこちらのテンプレートカテゴリのみ別のテンプレートで差し替えています。
カテゴリ別にテンプレートを切り替えるには、カテゴリごとにテンプレート・モジュールを作成して再構築時に個別にテンプレートが作成されるようにします。
カテゴリ・アーカイブのテンプレート変更
基本的には変更したいカテゴリとそれ以外・・・というように考えます。
そうすると以下のようになります。
<!-- カテゴリ名がテンプレート・カテゴリ名かどうかチェックします --><MTIfEqual a="[MTCategoryLabel]" b="011Template( テンプレート )"><!-- テンプレート・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Template"$><MTElse><!-- それ以外の場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Standard"$></MTElse></MTIfEqual>
上記は実際にわたしのサイトで使ってるカテゴリ・アーカイブのテンプレートでして、Compareプラグインを使用して、カテゴリ名を元にテンプレート・カテゴリ(=011Template( テンプレート ))とそれ以外というように、2分岐させた例です。
複数のカテゴリでテンプレートを切り替えたい(多分岐させたい)場合には、こちらのブログの表示を条件で変えるでご紹介したMTSwitchプラグインを使用するといいかも、です。
その場合には以下のようになります。
<MTSwitch value="[MTCategoryLabel]"><MTSwCase value="010MovableType( ムーバブルタイプ )"><!-- ムーバブルタイプ・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: MovableType"$></MTSwCase><MTSwCase value="011Template( テンプレート )"><!-- テンプレート・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Template"$></MTSwCase><MTSwCase value="012Customize( カスタマイズ )"><!-- カスタマイズ・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Customize"$></MTSwCase><MTSwDefault><!-- 上記の何れにも該当しない場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Standard"$></MTSwDefault></MTSwitch>
[2007.04.15]
TAEKOさんのアドバイスで、MovableType(ムーバブルタイプ)標準のタグ、<MTIfCategory>や<MTIfIsDescendant>条件タグでも同様のことが可能です。
具体的には以下のようなかんじになります。
<MTIfCategory>条件タグによる2分岐<MTIfCategory name="011Template( テンプレート )"><!-- テンプレート・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Template"$><MTElse><!-- それ以外の場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Standard"$></MTElse></MTIfCategory>
<MTIfIsDescendant>条件タグは、現在のカテゴリーが指定したカテゴリーの子孫であるかどうかを判定するタグです。
なので、チェックする際には階層が下(子孫カテゴリ)から条件分岐させていくのがポイントです ( ̄∇ ̄)b
<MTIfIsDescendant>条件タグによる多分岐<MTIfIsDescendant parent="011Template( テンプレート )"><!-- テンプレート・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Template"$><MTElse><MTIfIsDescendant parent="012Customize( カスタマイズ )"><!-- テンプレート・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Template"$><MTElse><MTIfIsDescendant parent="010MovableType( ムーバブルタイプ )"><!-- ムーバブルタイプ・カテゴリの場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: MovableType"$><MTElse><!-- 上記の何れにも該当しない場合以下のテンプレート・モジュールをインクルードします --><$MTInclude module="Category: Standard"$></MTElse></MTIfIsDescendant></MTElse></MTIfIsDescendant></MTElse></MTIfIsDescendant>
上記例を参考にして各自の目的に合った分岐を作ってあげて、カテゴリ・アーカイブのテンプレートを差し替えます。
ここではまだ再構築しないでくださいね。再構築するとエラーしますよ (; ̄∇ ̄A
カテゴリ別のテンプレート・モジュール作成
次にカテゴリ別のテンプレート・モジュールを作成します。
テンプレート・モジュールの作り方が分からない人は、こちらのMovableTypeのモジュールを作ってみるを参考にするといいかも、です。
ここの作業で、本来のカテゴリ・テンプレートを作成します。
わたしのサイトだと、
Category: Standard: デフォルトのカテゴリ・テンプレート
例:http://bizcaz.com/archives/movabletype/customize/Category: Template: テンプレート・カテゴリ用のテンプレート
例:http://bizcaz.com/archives/movabletype/template/
というかんじで、2つのテンプレートを作成しています。
カテゴリ・アーカイブを再構築
一通りテンプレート・モジュールを作成したら、カテゴリ・アーカイブのみ再構築します。
以上で、カテゴリごとにテンプレートを切り替えることができます ( ̄∇ ̄)/
わたしは性格的に在り来たりなのが嫌で、用途に応じてレイアウトを変更したり、カテゴリ別にテンプレート差し替えたりなど、何らかの変化がないとすぐ飽きちゃうんですの。
ワレながら困った性格だとは思ってます (; ̄∇ ̄A
先日、こちらの季節ごとにスタイルシートを切り替えるなんてのもご紹介してます♪
Trackback Pings(0)
No trackbacks found.




こんにちは。
これ、条件分枝させる時はプラグイン使わなくてもできますよー。
私は必要に応じて、<MTIfCategory>や<MTIfIsDescendant>などを使ってます。
カテゴリーごとに変えたい場合は<MTIfCategory>、特定のカテゴリ以下は全部同じにしたい場合などは<MTIfIsDescendant>の方がまとめて一括指定できるので楽かもです。
条件分枝タグは入れ子にして使えますから、複数のカテゴリで表示を変えたい場合にも対応できます。
<MTIfCategory>は3.3から追加されたタグですが、<MTIfIsDescendant>は3.1時代からありますので、バージョン低くても使えるかと。
>>1 TAEKO さん
こんにちわ^^
いつもアドバイスありがとうございます(●´∀`●)
そうですね。
MT標準の<MTIfCategory>や<MTIfIsDescendant>条件タグを使う方がバージョン依存もないし、環境にも依存しないですもんね ( ̄∇ ̄)b
MT始めたてのころは<MTIfIsDescendant>条件タグと<MTElse>条件タグで似たようなことやってたのですが、多分岐させたい場合入れ子が深くなってしまうので、見易く条件分岐させられる、MTSwitchプラグインで対応するようにしたんです。
強いて言えば、読み易さを重視した・・・といったところでしょうか。
でも、ダイナミック・パブリッシングに移行となった場合、標準タグを使っておけば問題にならずに済みますね。さっそく追記させてもらいます ( ̄∇ ̄)/