Movable Typeのテンプレート・タグを扱うときには、以下の2つの原則に留意します。
この2つのポイントについては、この先、詳しく説明しています。 他のコンテンツ管理システム(CMS)を使っており、他のテンプレート・タグの方が使い慣れているユーザーに対し、以下に、Movable Typeと他のCMSにおけるメンタル・モデル(ユーザーが当然期待する機能性)の違いについて概説します。
Movable Typeのテンプレート・タグは、Bloggerのテンプレート・タグと機能性が非常によく似ています。 Bloggerでは <Blogger> タグを使いエントリーのリストを囲みます。そして <$Blog*$> タグを使い変数置換を表します。
このモデルからMovable Typeに変換するのは、とても簡単です。
<Blogger> と </Blogger> のペアのタグは、 <MTEntries> と </MTEntries> のペアのタグに置き換えられます。
<$Blog*$> タグは、類似した名前を持つ <$MTEntry*$> タグに置き換えられます。
もちろんMovable Typeは、Bloggerよりも多くのテンプレート・タグを備えていますが、メンタル・モデルはよく似ています。
Greymatterのテンプレート・タグは、Movable Typeのものとは異なります。Greymatterでは、たとえば、インデックス・ページにエントリーをすべて一覧表示させるとき、 {{logbody}} タグを挿入します。 次に、インデックス・ページに一覧表示する各エントリーのスタイルを調整するため、 Index Entry Template: Standard Entries と Index Entry Template: Extended Entries の2つのテンプレートをカスタマイズします。このモデルからMovable Typeに変換するときは、以下のようにします。
{{logbody}} タグを <MTEntries> コンテナ・タグに置き換えます。
Index Entry Template: Standard Entries と Index Entry Template: Extended Entries のマークアップが一緒になり <MTEntries> タグと </MTEntries> タグのマークアップを形成します。 マークアップを追記のエントリーだけに表示する場合は、そのマークアップを <MTEntryIfExtended> コンテナ・タグに入れます。 さらにもちろん、Greymatterの変数値置換タグを対応するMovable Typeのタグに変更します。
なぜMovable Typeはテンプレートのためのメンタル・モデルを使っているかというと、以下の2つの理由があります。
(上の記載はGerymaterを批評するのが目的ではありません。Gerymaterの例を挙げたのは、Movable Typeが異なる点とそれを採用している理由についてわかりやすく説明するためです。)
Movable Typeのテンプレートは、標準のプレーン・テキスト(または場合によってはHTML)の中に埋め込まれた特殊なタグから成ります。タグのセットはコンテナ・タグと変数タグの2つに分類できます。
Movable Typeのタグはすべて、HTMLタグのように「<」と「>」の間に囲まれています。 また、任意で以下のように「 $ 」を「<」と「>」の間に挿入することもできます。
<$MTEntryBody$>
「 $ 」を挿入しておくと、HTMLタグとの識別が素早くできます。「 $ 」の使用は任意です。デフォルト・テンプレートとドキュメントの中では、「 $ 」を、変数タグだけに使いコンテナ・タグには使わないよう統一されています。 これは、コンテナ・タグの終了タグに「 $ 」が使用されていると、システムが終了タグを見つけ出せなくなってしまうためです。したがってコンテナ・タグの終了タグには「 $ 」を 使用しないようにしてください 。
Movable Typeのタグの中には、アトリビュートを取りタグのデフォルトの動作を変更できるものがあります。 Movable Typeのタグのアトリビュートは、HTMLのタグのアトリビュートと同様の仕組みで、タグの中に名前と値のペアである name="value" のリストが半角空白を区切りにリストされます。 以下がその例です。
<MTEntries author="Foo" category="Bar">
(このアトリビュートの内容については、 <MTEntries> のドキュメントを参照してください。)
アトリビュートの値は必ず「"」(ダブルクオーテーション)で囲んでください。さもないと、正しく動作しないことがあります。 「 $ 」付きのMTタグでアトリビュートを使うときは、後ろの「 $ 」の前にアトリビュートをおいてください。 以下に例を挙げます。
<$MTEntryDate format="%B %e, %Y"$>
Movable Typeのさまざまなタグによってサポートされるアトリビュートは、タグと一緒に記述します。
Movable Typeのタグはそのほとんどがコンテキスト依存型です。つまりタグは適切なコンテキストの中で使う必要があります。
コンテキストは通常、コンテキストを囲むテンプレートまたはコンテキストを囲むコンテナ・タグによって決まります。たとえば、テンプレート・タグのマークアップは、 <MTEntries> タグ、 Individual Entry のアーカイブ・ページ、 Comment Listing テンプレート、 Comment Preview テンプレートのいずれかにあるエントリー・コンテキストに配置されます。 したがって、 <$MTEntryTitle$> タグや <MTComments> コンテナ・タグは、これらの適したコンテキストの中で使ってはじめて意味を成します。
以下は、いかにテンプレートが解析され、出力ページに構築されるかについての技術情報です。
最初のステップでは、入ってきたテンプレートをトークンに分割します。トークンは <$MTEntryText$> タグ、 <MTEntries> タグなど、または直接挿入された生テキストのブロックから成ります。 タグの中には <MTEntries> などのコンテナ・タグがありますが、これらのタグの開始タグと終了タグの間にあるサブテンプレートもまた、トークンに分割され、そのコンテナ・タグの直下に保管されます。
2番目のステップでは、これらのトークンを、1つのエントリー、エントリーを一覧した1つのリスト、1つのコメント、コメントを一覧した1つのリストなどと一緒に集め、つまり一種のコンテキストにまとめ、最終的な出力ページに構築します。 通常この最終的なページはHTMLです。ただし、Movable TypeにはRSSシンジケート用テンプレートが搭載されていることからお分かりのように、出力ページはHTMLだけに限定されません。
タグ自体はハードコードされずにパーサー(テキストをトークンにコンパイルするオブジェクト)に送られます。パーサーはタグを見つけると、コンテキスト・オブジェクトにそれがどんなタイプのタグであるか、それはコンテナ・タグであるか、などを尋ねます。 次にタグがトークンのリストに追加されます。
同様にタグは、ハードコードされずに最終的な出力を構築するオブジェクト(つまり、インタープリター)に送られます。 このオブジェクトもまた、コンテキスト・オブジェクトと伝達を交わして、このオブジェクトが扱う各タグに付き、匿名のサブルーチン(作成されるときに、コンテキスト・オブジェクトに登録されている)を起動させます。 そして、このサブルーチンは、最終的な出力へ直接挿入される出力ブロックを返します。