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

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

Posted at April 28,2008 2:11 AM
Tag:[Entry, MovableType, Template]

Movable Type 4 でカテゴリー別にブログ記事ページのデザインを切り替える方法を、2回に分けて紹介します。

「サンプルを」という要望を頂いているのですが、時間がとれないので、以下のイメージのみでお許しください。

やりたいことは、ひとつのブログ記事アーカイブを使った、カテゴリー別のブログ記事ページのデザイン(HTMLマークアップやCSS)の切り替えです。

カスタマイズイメージ

1.MTEntryIfCategory タグブロック内のサブテンプレートをモジュール化する

ブログ記事アーカイブのデザインを変更する1つめの方法で、MTEntryIfCategory タグブロック内にサブテンプレートをベタ書きするのではなく、MTInclude タグを使います。

カテゴリー1~3

<MTEntryIfCategory name="カテゴリー1">
<$MTInclude module="カテゴリー1"$>
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー2">
<$MTInclude module="カテゴリー2"$>
</MTEntryIfCategory>
<MTEntryIfCategory name="カテゴリー3">
<$MTInclude module="カテゴリー3"$>
</MTEntryIfCategory>

こうすることにより、カテゴリーアーカイブ本体では「どのカテゴリーにどのテンプレートを割り当てるか」という制御に徹することができ、テンプレート全体の見通しがよくなります。

汎用的なデザインを与えたいカテゴリー4~6を新たに追加する場合は、次のようにします。

<MTEntryIfCategory name="カテゴリー1">
<$MTInclude module="カテゴリー1"$>
<MTElse>
  <MTEntryIfCategory name="カテゴリー2">
  <$MTInclude module="カテゴリー2"$>
  <MTElse>
    <MTEntryIfCategory name="カテゴリー3">
    <$MTInclude module="カテゴリー3"$>
    <MTElse>
    <$MTInclude module="カテゴリーその他"$>
    </MTEntryIfCategory>
  </MTEntryIfCategory>
</MTEntryIfCategory>

最初の MTEntryIfCategory タグでカテゴリー1であるか判定をし、そうでなければ MTElse を実行して、次の MTEntryIfCategory タグでカテゴリー2であるか判定をします。その繰り返しで、最後のカテゴリー判定にマッチしなかったカテゴリーには一番最後の MTElse タグの内容、つまりデフォルトとなるデザインのテンプレートモジュールを呼び出します。

2.MTEntryIfCategory タグを除去して、モジュール化をさらに最適化する

さて、すでにお気づきの方もいらっしゃると思いますが、1項のリストは、カテゴリーを識別するキーさえ取得できれば、実は以下の1行で済みます。

<$MTInclude module="カテゴリーを識別するキー"$>

「カテゴリーを識別するためのキー」として、次のようにカテゴリー名を使ってみます。カテゴリー名は、MTInclude タグを実行する前に、MTSetVarBlock タグを使って変数に設定し、変数名をmoduleモディファイアに与えれば、ダイナミックにカテゴリー名を設定することができます。

<$MTCategoryLabel setvar="category_name$>
<$MTInclude module="$category_name"$>

これで、このアーカイブが「カテゴリー1」の再構築を行うときには変数 category_name には「カテゴリー1」が、「カテゴリー2」の再構築を行うときには変数 category_name には「カテゴリー2」...という具合に設定され、それぞれ「カテゴリー1」「カテゴリー2」...という名前のテンプレートモジュールを呼び出します。

注意するのは、変数category_nameをmoduleモディファイア(というか、nameモディファイア以外)で使う場合は、変数名の前に大抵「$」をつけておく、ということです。

3.MTIf タグを使ってデフォルトデザインの条件分岐をつける

2つめのリストのように、デフォルトのデザインと振り分けたい場合は、さらに MTIf タグと MTCategoryDescription タグで制御します。

<$MTCategoryDescription setvar="category_description$>
<mt:if name="category_description">
  <$MTInclude module="$category_description"$>
<mt:else>
  <$MTInclude module="デフォルト"$>
<mt:if>

このリストを使う前準備として、各カテゴリーの「カテゴリーの説明」欄に、呼び出したいモジュール名を設定しておきます。デフォルトデザインのモジュールを呼び出したいときには、「カテゴリーの説明」欄には何も設定しません。

そうすれば、MTIf タグの判定で「カテゴリーの説明」欄に記入されている場合に、「カテゴリーの説明」欄に設定された名前のテンプレートモジュールを呼び出します。「カテゴリーの説明」欄に記入していない場合は、「デフォルト」という名前のテンプレートモジュールを呼び出します。

なお、前回もお伝えしたとおり、「カテゴリーの説明」欄を使うよりも、カスタムフィールドを利用した方が妥当に思われます。


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


コメント

お忙しいようでサンプルが見れないのが残念です。
イメージ的にはなかなかいい感じのカスタマイズのように思えます。
また、どなたかカスタマイズされるでしょ
その時には是非見てみたいものです

[1] Posted by conan : April 28, 2008 9:36 PM

>conanさん
こんばんは。
サンプルなしで申し訳ありません。
ではでは!

[2] Posted by yujiro logo : May 1, 2008 2:10 AM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

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

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