テンプレートタグの種類と働き
MovableType.net のテンプレートタグは HTML などのマークアップ言語に似たフォーマットを持っています。しかし、実際に行う作業はマークアップではなく、プログラミングに近いものがあり、条件に当てはまるだけループしたり、特定の条件による処理の分岐などをおこなえます。ここではテンプレートタグの種類と各々の働きを解説します。
ブロックタグ
ブロックタグは XHTML 要素のように開始タグと終了タグをもち、ひとまとまりのテンプレートを囲みます。このブロックタグにコンテナされたひとまとまりのテンプレートをサブテンプレートと呼び、テンプレートタグ以外のものも含むことができます。また、ブロックタグの働きによりサブテンプレートとして利用できるテンプレートタグがかわります。
たとえば、記事のリストを表示するためのブロックタグ、MTEntries では、以下のような書式になります。
<mt:Entries>
<h2><mt:EntryTitle /></h2>
<mt:EntryBody />
</mt:Entries>
基本的にブロックタグは、コンテナしたサブテンプレートを処理するためのスペースだと考えると良いでしょう。例では MTEntries ブロックタグを利用することで、メインインデックステンプレート内で MTEntry... などのテンプレートタグが利用できるようになります。
ブロックタグの種類には大きく分けて二種類あります。各々の働きをみてみましょう。
リストを表示するブロックタグ
ブロックタグで囲まれたサブテンプレートは MovableType.net の設定、もしくはブロックタグに設定されたモディファイアに従い繰り返し処理されます。たとえばメインインデックステンプレートで、MTEntries タグを利用し、最新 5 件の記事タイトルをリストするの場合、以下のようになります。
<ul>
<mt:Entries lastn="5">
<li><mt:EntryTitle /></li>
</mt:Entries>
</ul>
この、最新 5 件の記事タイトルをリストするテンプレートについて、解説すると以下のようになります。
- ul 要素 (unordered list) の開始タグと終了タグは繰り返す必要が無いので MTEntries ブロックタグの外側に配置します。
- MTEntries ブロックタグの開始タグと終了タグを定義し、合わせて最新 5 件と指定するために lastn モディファイアを設定し、値を 5 としています。
- MTEntries ブロックタグのサブテンプレートとして、li 要素 (list) でマークアップされた MTEntryTitle を設定します。
このようにテンプレートを作成すると、<li>記事タイトル</li> が lastn モディファイアで指定された最新 5 件分 (つまり 5 回) 繰り返して出力します。結果は以下のようになります。
<ul>
<li>記事タイトル 01</li>
<li>記事タイトル 02</li>
<li>記事タイトル 03</li>
<li>記事タイトル 04</li>
<li>記事タイトル 05</li>
</ul>
条件文を作成するブロックタグ (コンディショナルタグ)
特定の条件に合わせてサブテンプレートを処理するか否かを判断するブロックタグです。たとえば、記事に追記が有る場合にのみ、特別な表示をしたい場合や、コメントの件数にあわせて出力するメッセージを変化させることができます。
たとえば、MTIfNonEmpty ブロックタグは tag モディファイアで指定したテンプレートタグに値が有る場合のみ、コンテナしたサブテンプレートを処理します。
<mt:IfNonEmpty tag="MTENtryMore">
<p><mt:EntryTitle />には追記があります。</p>
</MTIfNonEmpty>
記事の追記入力欄に何か一文字でも入力されていれば、つまり記事に追記があれば MTIfNonEmpty ブロックタグがコンテナしているサブテンプレートを処理します。
ファンクションタグ
ブロックタグとは違い、ファンクションタグは X/HTML の br (forced line break) 要素のようになります単体での利用が可能です。どこでも利用可能なもの、特定のコンテキスト内でのみ利用可能なものがあります。たとえば、MTEntryTitle ファンクションタグはエントリーコンテキストの中で利用可能です。
テンプレートタグの書式
大文字・小文字の区別は行いません。例えば、ファンクションタグは以下のように書くことができます。
<$mtentrytitle$>
<$MTENTRYTITLE$>
<$mtentryTITLE$>
また、ブロックタグは以下のように書くことができます。
<mtentries></mtentries>
<MTENTRIES></MTENTRIES>
<mtENTRIES></mtENTRIES>
テンプレートタグの種類を判別しやすいよう、ファンクションタグに設定されていた $ はこれまで同様、省略可能です。テンプレートタグの種類ごとに書き方を変えて判別することもできますが、単体で動作するファンクションタグは、XHTML の br (forced line break) 要素のように、書くことができます。
<mtEntryTitle />
さらに、テンプレートタグの開始にある MT という部分と、機能を表す部分の間にデリミタを設定することができます。
<mt:Entries>
<mt:EntryTitle />
</mt:Entries>