第24回:カテゴリーごとにテンプレートを切り替える
第23回では、テンプレートをモジュール化する方法について説明しました。今回は、カテゴリーごとにテンプレートを切り替える方法について説明します。
今まで説明してきた全23回の中でも特に重要な回になります。なぜ重要なのか、おおよそ想像がつくかと思いますが、Movable Typeのデフォルトでは、カテゴリーごとにテンプレートを変更することができません…。
これがどういうことかというと、元となるテンプレートが3カラムデザインなら全てのページが3カラムとなり、2カラムデザインなら全てのページが2カラムとなってしまいます。しかしながら、実際問題、カテゴリー別にレイアウトを変更したり、特定のカテゴリーだけオリジナリティなデザインで構成したいケースは少なからずでてくるかと思います。
例えば、ニュースカテゴリーを3カラムに、通常の日記を2カラムにしたり、あるいは、特定のカテゴリーのみタイトル一覧で表示させたりなど、アイディアと工夫次第で個性溢れるユニークなデザインを作成する事ができます。せっかく、ホスティング系ブログとの個性差をだすためにMovable Typeを選択したのですから、その柔軟なカスタマイズ性を最大限に発揮させましょう♪
説明に入ります。カテゴリーごとにテンプレートを切り替えるには、おそらくいくつかの方法があると思いますが、ここではSupplemental Category Tags というプラグインを利用します。
まず、以下のサイトより、mtcatx-1_5.zip をダウンロードしてきてください。もしも、カテゴリーごとのテンプレートを正規表現を使って分岐する予定があるならば、mtregex-1_61.zip もついでにダウンロードしておきましょう。
mtcatx-1_5.zip を解凍した中に、catx.pl と catx.pm が格納されていますので、それぞれ以下のディレクトリにコピーしておきましょう。bradchoateというディレクトリは存在しないので作成します。
⇒mtcatx-1_5.zip
(MTディレクトリ)/plugins/catx.pl
(MTディレクトリ)/extlib/bradchoate/catx.pm
⇒mtregex-1_61.zip
(MTディレクトリ)/plugins/regex.pl
(MTディレクトリ)/extlib/bradchoate/regex.pm
(MTディレクトリ)/extlib/bradchoate/postproc.pm
カテゴリーごとに異なるテンプレートを表示させるのに使用するタグは、MTIfCategory もしくは、MTIfNotCategory です。共に、name 属性と pattern 属性を指定する事ができ、カテゴリーを固定して指定する場合は name属性、正規表現を使ってパターンで条件分岐する場合は pattern 属性を用います。
下の例では、news カテゴリーにHTTP要求があった場合は、「あいうえお」がブラウザに表示され、diary カテゴリーにHTTP要求があった場合には、「かきくけこ」が出力されます。
あいおうえお
</MTIfCategory>
<MTIfCategory name="diary">
かきくけこ
</MTIfCategory>
上の例は、カテゴリー別に文章を部分的に変更したい場合に用いますが、これを応用する事で、カテゴリー別にテンプレートそのものを切り換える事ができます。
以下の例では、先ほどは、「あいうえお」「かきくけこ」と入れた場所に、MTIncludeタグ を使って特定のモジュールを読み込ませています。
<$MTInclude module="3colum_template"$>
</MTIfCategory>
<MTIfCategory name="diary">
<$MTInclude module="2colum_template"$>
</MTIfCategory>
上記ソースを説明すると、news カテゴリーならば 3カラム用のテンプレート「3colum_template」モジュールを、diary カテゴリーならば「2colum_template」 モジュールを読み込ませるようにしています。
まず、「テンプレート」→「アーカイブ」→「カテゴリー・アーカイブ」に上記のソースを挿入します。その際、すでに記述されている「カテゴリー・アーカイブ」のソースは、必要な部分以外は全て削除してしまいます。そして、3カラム用と2カラム用のテンプレートモジュールを新規に作成し、「カテゴリー・アーカイブ」テンプレートからそのモジュールを読み込ませます。結果として、「カテゴリー・アーカイブ」のソースは、以下図のように極めてシンプルな形になります。
ここまでで、おおよそのイメージはつかめましたでしょうか?
この方法を応用する事で、個別エントリー・アーカイブも同様にして条件分岐させることができます。さらに、もっと発展させるならば、サイト内をヘッダー、3カラムメイン部分(左メニュー/メイン/右メニュー)、2カラムメイン部分(左メニュー/メイン)、フッターなどに細かく細分化し、全てのパーツをモジュール化した上で、最後にMTIfCategory で、カテゴリーに合わせたモジュールを割り当てていきます。このように、カテゴリーごとにパーツ(モジュール)を差し替える事で、カテゴリーによって左サイドメニューや右サイドメニューを変更したり、メイン部分をタイトル一覧表示させたりといった事が可能になるのです。
ちょっと凝ったサイトを作ろうと思ったら、条件分岐は必須となってくるので、是非、利用してみてください。使い方さえ慣れてしまえば、今まで以上に柔軟なレイアウトを実現させる事ができるでしょう。
以上、第24回は終了です。
参考になりましたらポチっとお願いします♪