静的テンプレートで設定した変数をDynamicMTMLで参照するプラグイン

静的なテンプレートの中でMTSetVarタグやMTSetVarBlockタグで設定した変数を、DynamicMTML内で参照して各種の処理を行えるようにするプラグインを作りました。

1.このプラグインでできること

例えば、以下のようなテンプレートを考えてみてください。
変数blog_nameにブログ名を代入し、それをDynamicMTMLで出力しようする例です。

<mt:SetVarBlock name="blog_name"><$mt:BlogName$></mt:SetVarBlock>
<mt:DynamicMTML>
<$mt:GetVar name="blog_name"$>
</mt:DynamicMTML>

1行目のMTSetVarBlockタグは、MTDynamicMTMLタグのブロックの外にありますので、静的に処理されます。
一方、3行目のMTGetVarタグは、MTDynamicMTMLタグのブロックの中にありますので、動的に処理されます。

しかし、静的なMTSetVarタグで定義した変数は、再構築の処理をしている間だけ有効で、DynamicMTML側には渡りません。
したがって、DynamicMTML内では変数blog_nameは未定義の状態で、上記のテンプレートは何も出力しないことになります。

今回公開するプラグインは、上記の点を改良します。

2.インストール

プラグインは以下からダウンロードします。

DMSetVar_1_00.zip

ダウンロードしたファイルを解凍すると、「plugins」というフォルダができます。
このフォルダを、Movable Typeのインストール先ディレクトリにアップロードします。

3.追加されるテンプレートタグとモディファイア

このプラグインをインストールすると、以下のテンプレートタグとモディファイアが追加されます。

3-1.MTDMSetVarタグ/MTDMSetVarBlockタグ

静的なテンプレートで変数を定義し、DynamicMTMLに渡す働きをします。
MTSetVarタグ/MTSetVarBlockタグの代わりに使います。
モディファイアの書き方は、MTSetVarタグ/MTSetVarBlockタグと同じです。

例えば、前述の例を以下のように書き換えるとします。
すると、MTDMSetVarタグで定義した変数blog_nameがDynamicMTML側に渡され、ブログ名が出力されます。

<mt:DMSetVarBlock name="blog_name"><$mt:BlogName$></mt:DMSetVarBlock>
<mt:DynamicMTML>
<$mt:GetVar name="blog_name"$>
</mt:DynamicMTML>

また、「with_setvar」というモディファイアを指定することもできます。
「with_setvar="1"」とすると、静的にも変数を定義します(MTSetVarタグ/MTSetVarBlockタグと同じ動作)。
その後の静的なテンプレートの処理の中でも、その変数を使うことができます。

一方、with_setvarモディファイアを指定しない場合、DynamicMTMLに変数を渡す処理だけを行い、静的には変数を定義しません。
その後の静的なテンプレートの処理の中では、その変数は未定義(もしくはそれまでに代入されていた値のまま)になります。

なお、MTSetVarTemplateタグに対応するテンプレートタグはありません(静的なテンプレートでMTSetVarTemplateタグで定義した部分を、DynamicMTMLに渡すことはできません)。

3-2.dm_setvarモディファイア/dm_with_setvarモディファイア

テンプレートタグの値を、DynamicMTML側の変数に渡す働きをします。

例えば、前述の例は、以下のように書き換えることもできます。

<$mt:BlogName dm_setvar="blog_name"$>
<mt:DynamicMTML>
<$mt:GetVar name="blog_name"$>
</mt:DynamicMTML>

なお、dm_setvarモディファイアでは、DynamicMTMLに変数の値を渡すだけで、静的な変数は定義しません(setvarモディファイアの処理は行いません)。
一方、dm_with_setvarモディファイアでは、DynamicMTMLに変数の値を渡すとともに、静的な変数も定義します(setvarモディファイアの処理も同時に行います)。

4.使い道は?

上記の説明を読んでも、「何に使うの?」と感じる方が多いのではないかと思います。
しかし、このプラグインを使うことで、一般的な動的専用CMSには真似のできないことを、Movable Typeで実現しやすくなります。

何を実現できるのか・・・ぜひ皆さん考えてみてください。