Movable Typeのテンプレート・タグを扱うときには、以下の2つの原則に留意します。
この2つのポイントについては、この先、詳しく説明しています。 他のコンテンツ管理システム(CMS)を使っており、他のテンプレート・タグの方が使い慣れているユーザーに対し、以下に、Movable Typeと他のCMSにおけるメンタル・モデル(ユーザーが当然期待する機能性)の違いについて概説します。
<Blogger>
タグを使いエントリーのリストを囲みます。そして<$Blog*$>
タグを使い変数置換を表します。 このモデルからMovable Typeに変換するのは、とても簡単です。
<Blogger>
と</Blogger>
のペアのタグは、<MTEntries>
と</MTEntries>
のペアのタグに置き換えられます。
<$Blog*$>
タグは、類似した名前を持つ<$MTEntry*$>
タグに置き換えられます。
もちろんMovable Typeは、Bloggerよりも多くのテンプレート・タグを備えていますが、メンタル・モデルはよく似ています。
{{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つの理由があります。
<MTEntries>
タグを使うと、エントリーのどんなリストも表すことができます。そしていろんな場所でそのリストのスタイルを好きなように変更できます。 これに対してGreymatterのアプローチでは、{{logbody}}
が常に同じマークアップ(2つあるIndex Entry Templates
テンプレートのいずれかのマークアップ)でスタイルされたエントリーのリストに置き換わります。 (上の記載はGerymaterを批評するのが目的ではありません。Gerymaterの例を挙げたのは、Movable Typeが異なる点とそれを採用している理由についてわかりやすく説明するためです。)
Movable Typeのテンプレートは、標準のプレーン・テキスト(または場合によってはHTML)の中に埋め込まれた特殊なタグから成ります。 タグのセットはコンテナ・タグと変数タグの2つに分類できます。
<MTFoo>
というコンテナ・タグを使うと、テンプレートには以下のようなマークアップが見られることでしょう。
<MTFoo> Foo bar </MTFoo>
コンテナ・タグの開始タグと終了タグはHTMLの標準タグに似ています。
コンテナ・タグは、リストまたは条件文のいずれかを表すのに使います。
コンテナ・タグがたとえば<MTEntries>
のようにリストを表す場合、コンテナ・タグの中のサブテンプレートは、リストの各アイテムに適用されます。 たとえば、<MTEntries>
タグを使うと、<MTEntries>と</MTEntries>の間のマークアップがリストの各エントリーに適用されます。
コンテナ・タグがたとえば<MTEntryIfExtended>
のように条件文を表す場合、開始タグと終了タグの間のマークアップは、該当する条件を満たした場合に限り表示されます。 たとえば、<MTEntryIfExtended>
タグを使うと、条件文ではエントリーに追記があるかどうかをテストします。
<$MTEntryTitle$>
タグは、エントリーのタイトルに置き換わります。
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だけに限定されません。
タグ自体はハードコードされずにパーサー(テキストをトークンにコンパイルするオブジェクト)に送られます。パーサーはタグを見つけると、コンテキスト・オブジェクトにそれがどんなタイプのタグであるか、それはコンテナ・タグであるか、などを尋ねます。 次にタグがトークンのリストに追加されます。
同様にタグは、ハードコードされずに最終的な出力を構築するオブジェクト(つまり、インタープリター)に送られます。 このオブジェクトもまた、コンテキスト・オブジェクトと伝達を交わして、このオブジェクトが扱う各タグに付き、匿名のサブルーチン(作成されるときに、コンテキスト・オブジェクトに登録されている)を起動させます。 そして、このサブルーチンは、最終的な出力へ直接挿入される出力ブロックを返します。