「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
アーカイブの制御(その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」の外部スタイルシートが組み込まれます。