Movable Type 3.2 マニュアル - Movable Typeのテンプレート・タグ

« 目次

テンプレートとタグの概念

Movable Typeのテンプレート・タグを扱うときには、以下の2つの原則に留意します。

この2つのポイントについては、この先、詳しく説明しています。 他のコンテンツ管理システム(CMS)を使っており、他のテンプレート・タグの方が使い慣れているユーザーに対し、以下に、Movable Typeと他のCMSにおけるメンタル・モデル(ユーザーが当然期待する機能性)の違いについて概説します。

なぜMovable Typeはテンプレートのためのメンタル・モデルを使っているかというと、以下の2つの理由があります。

  1. 最初の理由は柔軟性です。 <MTEntries> タグを使うと、エントリーのどんなリストも表すことができます。そしていろんな場所でそのリストのスタイルを好きなように変更できます。 これに対してGreymatterのアプローチでは、 {{logbody}} 常に 同じマークアップ(2つある Index Entry Templates テンプレートのいずれかのマークアップ)でスタイルされたエントリーのリストに置き換わります。
  2. 管理するテンプレートの数が少しで済み、すべてのマークアップを、1つのテンプレートによって作成した1ページに納めることができます。 Greymatterのアプローチでは、一般的に1ページが小さいセクションに分けられ、そのセクションの1つずつがテンプレートと見なされます。 Movable Typeのテンプレート・システムでは、マークアップはすべて1カ所にまとめられ、コンテナ・タグを使って、それらを含めるか、含めないか、繰り返すかを選択します。

(上の記載は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だけに限定されません。

タグ自体はハードコードされずにパーサー(テキストをトークンにコンパイルするオブジェクト)に送られます。パーサーはタグを見つけると、コンテキスト・オブジェクトにそれがどんなタイプのタグであるか、それはコンテナ・タグであるか、などを尋ねます。 次にタグがトークンのリストに追加されます。

同様にタグは、ハードコードされずに最終的な出力を構築するオブジェクト(つまり、インタープリター)に送られます。 このオブジェクトもまた、コンテキスト・オブジェクトと伝達を交わして、このオブジェクトが扱う各タグに付き、匿名のサブルーチン(作成されるときに、コンテキスト・オブジェクトに登録されている)を起動させます。 そして、このサブルーチンは、最終的な出力へ直接挿入される出力ブロックを返します。


Copyright © 2001-2005 Six Apart, Ltd. All Rights Reserved.