Movable Type 4 でカテゴリー別にデザインを切り替える方法(その2)
Movable Type 4 でカテゴリー別にデザインを切り替える方法を、何回かに分けて紹介します。
1.ひとつのアーカイブテンプレートでカテゴリーを分割する
カテゴリーアーカイブのデザインを変更する2つめの方法は、アーカイブテンプレートの中で MTIfCategory タグを使います。MTIfCategory タグの name モディファイアには、カテゴリー名が重複しないように設定します。
カテゴリー1~3
<MTIfCategory name="カテゴリー1">
:
(カテゴリー1用のテンプレート)
:
</MTIfCategory>
<MTIfCategory name="カテゴリー2">
:
(カテゴリー2用のテンプレート)
:
</MTIfCategory>
<MTIfCategory name="カテゴリー3">
:
(カテゴリー3用のテンプレート)
:
</MTIfCategory>
この方法には、次のような特徴があります。
- カテゴリーの振り分け処理が可能
- 基本的にパスは一意に決まる
- 優先の制約がない
ひとつのアーカイブテンプレートにまとめる一番のメリットは、あるいくつかのカテゴリーには特殊なデザインを与え、そうでないものについては汎用的なデザインを適用できることです。
「その1」の方法では、アーカイブテンプレートをカテゴリーごとに与えているため、そのような制御ができなくなります。
例えば、冒頭のサブテンプレートに、汎用的なデザインを使いたいカテゴリー4~6を新たに追加する場合、最初に示したサブテンプレートでは、カテゴリー4~6を個別に指定する必要がありますが、次のように変更すれば、一括した指定が可能です。
<MTIfCategory name="カテゴリー1">
:
(カテゴリー1用のテンプレート)
:
<MTElse>
<MTIfCategory name="カテゴリー2">
:
(カテゴリー2用のテンプレート)
:
<MTElse>
<MTIfCategory name="カテゴリー3">
:
(カテゴリー3用のテンプレート)
:
<MTElse>
:
(カテゴリー4~6用のテンプレート)
:
</MTIfCategory>
</MTIfCategory>
</MTIfCategory>
最初の MTIfCategory タグでカテゴリー1であるかの判定をし、そうでなければ MTElse を実行して、次の MTIfCategory タグでカテゴリー2であるかの判定をします。その繰り返しで、最後のカテゴリー判定にマッチしなかったカテゴリーには一番最後の MTElse タグの内容、つまりデフォルトとなるデザインを適用します。
次の設定は誤りです。
<MTIfCategory name="カテゴリー1">
:
(カテゴリー1用のテンプレート)
:
</MTIfCategory>
<MTIfCategory name="カテゴリー2">
:
(カテゴリー2用のテンプレート)
:
</MTIfCategory>
<MTIfCategory name="カテゴリー3">
:
(カテゴリー3用のテンプレート)
:
<MTElse>
:
(カテゴリー4~6用のテンプレート)
:
</MTIfCategory>
理由は、「カテゴリー4~6用のテンプレート」と書かれた部分にはカテゴリー1とカテゴリー2が含まれるからです。
また、この方法では基本的に全てのカテゴリーに共通のパスを与えますが、テンプレートタグを用いることでカテゴリー別に異なるパスを与えることもできます(これについては別の機会に)。またカテゴリー用アーカイブがひとつであるため、「優先」の問題も回避できます。
2.スタイルシートについて
ここでは次の方法が考えられます。
まず、head 要素が、各カテゴリーのサブテンプレートに含まれているのであれば、head 要素内にカテゴリー用のスタイルシートを呼び出す link 要素をそのまま記述します。
すべてのカテゴリーが共通で head 要素をテンプレートモジュールとして呼び出している場合は、MTIfCategory タグブロック内に次のような MTSetVar タグを記述します。
<MTIfCategory name="cat1">
<mt:setvar name="style" value="[カテゴリー1用スタイルシートのファイル名]">
</MTIfCategory>
<MTIfCategory name="cat2">
<mt:setvar name="style" value="[カテゴリー2用スタイルシートのファイル名]">
</MTIfCategory>
<MTIfCategory name="cat3">
<mt:setvar name="style" value="[カテゴリー3用スタイルシートのファイル名]">
</MTIfCategory>
<$MTInclude module="ヘッダー"$>
<MTIfCategory name="カテゴリー1">
:
(カテゴリー1用のテンプレート)
:
汎用的なカテゴリー用のスタイルシートを作りたい場合は、次のようにします。
<MTIfCategory name="cat1">
<mt:setvar name="style" value="[カテゴリー1用スタイルシートのファイル名]">
<MTElse>
<MTIfCategory name="cat2">
<mt:setvar name="style" value="[カテゴリー2用スタイルシートのファイル名]">
<MTElse>
<MTIfCategory name="cat3">
<mt:setvar name="style" value="[カテゴリー3用スタイルシートのファイル名]">
<MTElse>
<mt:setvar name="style" value="[カテゴリー4~6用スタイルシートのファイル名]">
</MTIfCategory>
</MTIfCategory>
</MTIfCategory>
<$MTInclude module="ヘッダー"$>
<MTIfCategory name="カテゴリー1">
:
(カテゴリー1用のテンプレート)
:
そして、「ヘッダー」モジュールには次のように記述しておきます。
<mt:if name="category_archive">
<link rel="stylesheet" href="<$MTBlogURL$><$mt:getvar name="style"$>" type="text/css" title="<$MTCategoryLabel encode_html="1"$>" media="screen,tv" />
</mt:if>
または、MTCategoryDescription タグにスタイルシートのファイル名(下のサンプルでは拡張子なし)を設定しておき、「ヘッダー」モジュールだけで呼び出せる方法もあります。
<mt:if name="category_archive">
<link rel="stylesheet" href="<$MTBlogURL$><$MTCategoryDescription$>.css" type="text/css" title="<$MTCategoryLabel encode_html="1"$>" media="screen,tv" />
</mt:if>
異なるカテゴリーで同じデザインを適用したい場合は、MTCategoryDescription タグに該当する「カテゴリーの説明」欄に同じ名称を記述しておきます。
なお、「カテゴリーの説明」よりもカスタムフィールドを使う方が、用途が明確になってよりいいでしょう。
- Movable Type 4 でカテゴリー別にデザインを切り替える方法(その1)
- Movable Type 4 でカテゴリー別にデザインを切り替える方法(その2)
- Movable Type 4 でカテゴリー別にデザインを切り替える方法(その3)
- Movable Type6で記事のない親カテゴリのカテゴリページを出力する方法
- Movable Typeでブログ記事が属するカテゴリアーカイブのリンクをブログ記事ページに表示する
- Movable Typeで「カテゴリ+年別」の記事一覧を表示する方法
- Movable Typeで親カテゴリーアーカイブに表示した記事のメインカテゴリまでのパンくずリストを表示する
- Movable Typeのカテゴリのベースネームについて
- Movable Typeで複数ブログのブログ記事を同名のカテゴリ別に振り分ける方法
- Movable TypeのMTIfCategoryタグとMTEntryIfCategoryタグの違い
- Movable Typeのカテゴリリストで階層別に背景画像を変更する
- Movable Typeのカテゴリ・フォルダで特定の最上位階層を表示しない方法
- Movable Typeのカテゴリリストにダミーの親カテゴリを表示する
- MTEntriesタグのcategoryモディファイアに「AND」を含むカテゴリを指定する
- ブログ記事ページに自分が属するカテゴリのツリーと直属カテゴリの他のブログ記事一覧を表示する
- Movable Type 5でのMTEntriesタグのcategory/catgoriesモディファイアの動作改善について
- 親カテゴリーアーカイブにサブカテゴリーのブログ記事を表示する場合に特定のサブカテゴリーのブログ記事をフィルタリングする
- 特定のカテゴリのブログ記事を表示する
こんにちは、昨日に引き続き1つアイデアを。。
見栄えの違うカテゴリを新たに増やしたい時のことも考えて、こんなのはどうでしょうか?
昨日と同じくカテゴリの説明に文字を仕込む方法で説明すると、
カテゴリの説明にモジュール名を仕込んで、
そのモジュール名のテンプレートモジュールをインクルード。
もしカテゴリの説明が空だったら、デフォルトのモジュールをインクルード。
これならテンプレートの分岐は気にせずにカテゴリ増やせます。
ついでに変数使いまわせば、CSSの部分もいけますね。。
昨日コメントした吐き出し先のパスの指定方法と同様
こちらもカスタムフィールドを使った方がスマートですね。
MT4になってプラグインも使わずかなり複雑なこと出来るようになったなぁ。。
<MTSetVarBlock name="cate"><$MTCategoryDescription$></MTSetVarBlock>
<MTIf name="cate">
<$MTInclude module="$cate"$>
<MTElse>
<$MTInclude module="default"$>
</MTElse>
</MTIf>
>Yさん
こんばんは。
ネタありがとうございます。
ちなみに、MTIf は tag モディファイアが使えるので、MTSetVarBlock を省略して、
<MTIf tag="CategoryDescription">
と書けそうです。
ではでは!
> MTIf は tag モディファイアが使えるので・・・
なるほど。。
あっ、でも↓ここで結局使いませんか??
<$MTInclude module="$cate"$>
↑コメントでもこの枠使えるんですね。。
カッコいいから僕のブログでも使おうかなぁ。(いいですか?)
>Yさん
大変失礼しました!
枠はご自由にお使いください。