TopMovable Typeカスタマイズカテゴリー > Movable Type 4 でカテゴリー別にデザインを切り替える方法(その2)
2008年2月20日

Movable Type 4 でカテゴリー別にデザインを切り替える方法(その2)

Posted at February 20,2008 1:25 AM
Category:[カテゴリー]
Tag:[, , ]

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. カテゴリーの振り分け処理が可能
  2. 基本的にパスは一意に決まる
  3. 優先の制約がない

ひとつのアーカイブテンプレートにまとめる一番のメリットは、あるいくつかのカテゴリーには特殊なデザインを与え、そうでないものについては汎用的なデザインを適用できることです。
「その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 タグに該当する「カテゴリーの説明」欄に同じ名称を記述しておきます。

なお、「カテゴリーの説明」よりもカスタムフィールドを使う方が、用途が明確になってよりいいでしょう。


Posted by yujiro
関連記事
人気エントリー
トラックバックURL


コメント

こんにちは、昨日に引き続き1つアイデアを。。

見栄えの違うカテゴリを新たに増やしたい時のことも考えて、こんなのはどうでしょうか?

昨日と同じくカテゴリの説明に文字を仕込む方法で説明すると、
カテゴリの説明にモジュール名を仕込んで、
そのモジュール名のテンプレートモジュールをインクルード。
もしカテゴリの説明が空だったら、デフォルトのモジュールをインクルード。
これならテンプレートの分岐は気にせずにカテゴリ増やせます。
ついでに変数使いまわせば、CSSの部分もいけますね。。

昨日コメントした吐き出し先のパスの指定方法と同様
こちらもカスタムフィールドを使った方がスマートですね。

MT4になってプラグインも使わずかなり複雑なこと出来るようになったなぁ。。

<MTSetVarBlock name="cate"><$MTCategoryDescription$></MTSetVarBlock>
<MTIf name="cate">
<$MTInclude module="$cate"$>
<MTElse>
<$MTInclude module="default"$>
</MTElse>
</MTIf>

[1] Posted by Y : February 20, 2008 2:26 PM

>Yさん
こんばんは。
ネタありがとうございます。
ちなみに、MTIf は tag モディファイアが使えるので、MTSetVarBlock を省略して、

<MTIf tag="CategoryDescription">

と書けそうです。
ではでは!

[2] Posted by yujiro Author Profile Page : February 21, 2008 12:25 AM

> MTIf は tag モディファイアが使えるので・・・
なるほど。。

あっ、でも↓ここで結局使いませんか??

<$MTInclude module="$cate"$>
↑コメントでもこの枠使えるんですね。。
カッコいいから僕のブログでも使おうかなぁ。(いいですか?)

[3] Posted by Y : February 21, 2008 6:25 PM

>Yさん
大変失礼しました!
枠はご自由にお使いください。

[4] Posted by yujiro Author Profile Page : February 21, 2008 11:22 PM
コメントする

*必須



お知らせ:2008年5月現在、多忙のため、7月頃までコメントを速やかに回答できない状態が続きます。ご質問の内容によっては回答が7月以降になる可能性がありますので、予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Entries of this Category
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.1
 
List Me!