条件分岐で行う効率的なテンプレート管理 - テンプレートの判別
Movable Type 4 では MTIf, MTUnless ブロックタグの強化が行われ、既存の MTSetVar, MTSetVarBlock といった値をセットするタグと組み合わせることで、様々な値を利用した条件分岐を行えるようになりました。これにより、テンプレートごとに出力結果を操作したり、表示している内容に合わせてコンテンツを出し分けるといったことも可能になります。何度かの記事にわけて、これらのテンプレートタグを利用したカスタマイズ方法をご紹介します。
各テンプレートタグの詳細は、Movable Type テンプレートタグリファレンスを参照ください。
変数と値
MTSetVar ファンクションタグ、MTSetVarBlock ブロックタグで変数に値をセットするという作業をおこないます。カスタマイズの解説の前に、設定するどの部分が変数名で、どの部分が値なのかを整理しておきましょう。
MTSetVar, MTSetVarBlock で変数名となるのは、どちらも name モディファイアで設定する値です。その変数にセットされる値は MTSetVar ファンクションタグの場合は、value モディファイアで設定した値。MTSetVarBlock ブロックタグの場合は、開始タグと終了タグでコンテナしたコンテンツとなります。
テンプレートを判別するのに利用する
MTSetVar ファンクションタグを利用して、Movable Type がテンプレートを判別する仕組みを解説します。これは Movable Type 4 のデフォルトテンプレートでも利用されている方法です。Movable Type 4 のデフォルトテンプレートは、このように強化されたテンプレートタグや、新しく追加されたテンプレートタグの利用法の参考になる部分もたくさんあるので、チェックしてみると良いでしょう。
Movable Type 4 のデフォルトテンプレートを見てみると、以下のようなテンプレートタグがあります。
<mt:SetVar name="archive_index" value="1">
MTSetVar ファンクションタグに、name モディファイアで変数名が、value モディファイアで、その値が設定されています。value モディファイアの値は 1 となっていますが、name モディファイアで設定した変数名 archive_index に値が 0 (無し) ではないことを示すものですので、0 以外の文字でも構いません。
つまり、name モディファイアで設定した archive_index という変数に 0 以外の値があるという設定を行うことで、この MTSetVar ファンクションタグが記述されているテンプレートが archive_index と判別できるようにしている、という仕組みになります。
MTIf で条件分岐する
MTSetVar ファンクションタグでテンプレートの判別を行う準備を整えたら、MTIf ブロックタグと組み合わせてテンプレートごとに異なる出力をしてみましょう。以下のサンプルは、archive_index として判別されたテンプレートのみ、コンテンツを出力するテンプレートモジュールです。
<mt:If name="archive_index">
<p>このページを出力したのはアーカイブインデックステンプレートです。</p>
</mt:If>
これを sample という名前のテンプレートモジュールとして登録し、様々なテンプレートに MTInclude ファンクションタグを利用して読み込みます。
<mt:Include module="sample" />
テンプレートの編集後、再構築を行うと (ダイナミックパブリッシング利用時は不要)、テンプレートの最初に <mt:SetVar name="archive_index" value="1">
と書かれているテンプレートのみ、MTIf ブロックタグでコンテナしたコンテンツを出力します。
このカスタマイズを利用すれば、柔軟なテンプレートモジュールを作成し、テンプレート管理の効率化を行うことができます。次回は柔軟なテンプレートモジュールについて解説します。