アーカイブの制御(その8・条件によってアーカイブのテンプレートを変える)

しばらく間があきましたが、「アーカイブの制御」の話の続きです。
今日は、「カテゴリAだけ他のカテゴリと違うカテゴリアーカイブページを出力する」など、条件によってアーカイブのテンプレートを変える方法を紹介します。

1.条件によってアーカイブのテンプレートを変えたい

Movable TypeをCMS的に使う場合、以下のようなことは、よくあると思います。

1-1.特定のカテゴリのカテゴリーアーカイブページだけ、他のカテゴリとテンプレートを変えたい

例えば、カテゴリA~カテゴリEの5つのカテゴリがあるとします。
このときに、カテゴリAのカテゴリアーカイブページだけ、他の4つのカテゴリアーカイブページとは違うテンプレートを使いたい、というような場合があります。

1-2.特定のカテゴリに属するブログ記事のページだけ、他のカテゴリのブログ記事とテンプレートを変えたい

前述の例のように、カテゴリA~カテゴリEの5つのカテゴリがあるとします。
このときに、カテゴリAに属するブログ記事だけ、他の4つのカテゴリのブログ記事とは違うテンプレートを使いたい、というような場合があります。

2.MTIfタグによる条件判断が必要

現状のMovable Typeでは、上記のように条件によってアーカイブテンプレートを使い分けたい場合、その設定を管理画面上で簡単に行うような機能はありません。
MTSetVarタグやMTIfタグを活用し、カテゴリ等の条件を判断して、テンプレートを切り分けるようにします。

カテゴリ等の条件でテンプレートを分ける場合、大きく分けて、以下のような2つのパターンが考えられます。

  • テンプレートの大半の部分は共通で、ごく一部をカテゴリ等の条件で分ける
    例:カテゴリ毎にスタイルシートを変えたい(それ以外のテンプレートの構造は、カテゴリに関係なく同じ)
  • カテゴリ等の条件によって、使うテンプレートがまったく異なる
    例:「新着情報」カテゴリは記事のタイトルの一覧を表示し、「商品情報」カテゴリは商品名/商品概要/写真を一覧表示したい(「新着情報」カテゴリと「商品情報」カテゴリで、テンプレートの構造が大きく異なる)

3.テンプレートの一部を条件で切り分ける

前者と後者では、適した作業のやり方が異なります。
今日は前者の手順を解説します。
後者の手順は明日解説します。

テンプレートのごく一部を条件で切り分ける場合は、アーカイブテンプレートの中に、MTIfタグでカテゴリー等を判断する部分を入れます。

以下のような例があるとします。

  • カテゴリAのカテゴリアーカイブページでは、「style-cat_a.css」の外部スタイルシートを組み込む
  • それ以外のカテゴリのカテゴリアーカイブページでは、「style.css」の外部スタイルシートを組み込む

この場合、カテゴリアーカイブテンプレートの外部スタイルシート組み込み部分を、以下のようにすると良いでしょう。

<$mt:CategoryLabel setvar="cat_label"$>
<mt:If name="cat_label" eq="カテゴリA">
  <link rel="stylesheet" href="<$mt:BlogURL$>style-cat_a.css" type="text/css" />
<mt:Else>
  <link rel="stylesheet" href="<$mt:BlogURL$>style.css" type="text/css" />
</mt:If>

1行目で、カテゴリ名を変数cat_labelに代入します。
そして、2行目のMTIfタグで、変数cat_labelの値が「カテゴリA」に等しいかどうかを判断します。
等しい場合は3行目が出力され、「style-cat_a.css」の外部スタイルシートが組み込まれます。
一方、等しくない場合は5行目が出力され、「style.css」の外部スタイルシートが組み込まれます。