変数の機能を拡張するプラグイン

Movable Type 4以降では、テンプレート内で変数を使う機能が強化されました。
ただ、不便な点もいくつかあります。
その点を強化するプラグインを作りましたので、公開します。

2008年12月16日
式の中でrand関数が使えなかったので修正しました。

2013年5月15日
Movable Type 5.x対応にしました。

1.インストール

プラグインは以下からダウンロードすることができます。

VarExpand_1_02.zip

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

2.ライセンス

このプラグインは、MITライセンスで配布します。
商用版MT/MTOSともに、無償かつ無保証でご利用いただくことができます。

3.変数間の計算を行いやすくする

MTSetVar等のタグで、変数に値を代入することができます。
また、MTSetVarタグのopモディファイアを使うことで、簡単な計算を行うこともできます。
ただ、複雑な計算をしようとすると、MTSetVarタグを何度も使う必要がでて、テンプレートが冗長になります。

MTIfタグにはtestモディファイアがあり、式の計算結果で条件判断を行うことができます。
このプラグインでは、testモディファイアの処理を真似て、計算を行いやすくする「MTSetVarFormula」と「MTGetVarFormula」のタグを追加します。

MTSetVarFormulaタグは、計算式の結果を変数に代入する処理をします。
計算式の中では、変数は「$変数名」のように書きます。
書き方は以下のようになります。

<MTSetVarFormula name="代入先の変数名" formula="計算式">

MTGetVarFormulaタグは、計算式の結果をそのまま出力する処理をします。
書き方は以下のようになります。

<MTGetVarFormula formula="計算式">

例えば、変数yと変数zの和を2で割って、その結果を変数xに代入するには、以下のように書きます。

<MTSetVarFormula name="x" formula="($y+$z)/2">

上記の計算で、結果をそのまま出力するには、以下のように書きます。

<MTGetVarFormula formula="($y+$z)/2">

また、計算式の中で、Perlの組み込み関数を使うこともできます。
例えば、変数xの絶対値を求めて、変数xに代入しなおすには、以下のように書きます。

<MTSetVarFormula name="x" formula="abs($x)">

計算式の中で、配列やハッシュを使うこともできます。

配列の要素は、「$変数名->[インデックス]」と表します。
例えば、配列xの0番の要素は、「$p->[0]」と表すことができます。

また、ハッシュの要素は、「$変数名->{キー}」と表します。
例えば、ハッシュxの中で、キーが「abc」の要素は、「$x->{abc}」と表すことができます。

4.MTSetVarTemplateのモジュールにパラメータを渡す

MTSetVarTemplateタグを使うと、テンプレート内で繰り返し出てくる部分をモジュール化して、関数のように使うことができます。
ただ、MTGetVarタグでモジュールを呼び出す際に、パラメータを渡す機能はありません。
ところが、MTIncludeタグでテンプレートモジュールを組み込む際には、パラメータを渡す機能があります。

そこで、このプラグインでは、MTIncludeタグのように、MTSetVarTemplateタグのモジュールにパラメータを渡す機能を追加します。
その場合には「MTGetVarFunction」というタグを使います。
書き方は以下のようになります。

<MTGetVarFunction name="モジュール名" パラメータ名="値" パラメータ名="値" ・・・>

例えば、以下のようにMTSetVarTemplateタグでモジュールを定義するとします。
このモジュールは、変数textの文字列を、変数tagで示すタグによって囲む処理をするものです。

<MTSetVarTemplate name="wrap_tag">
<<MTGetVar name="tag">><MTGetVar name="text"></<MTGetVar name="tag">>
</MTSetVarTemplate>

このモジュールを使って、「Movable Type」という文字列を、strongタグで囲みたいとします。
MTGetVarFunctionタグを使うと、以下のように書くことができます。

<MTGetVarFunction name="wrap_tag" tag="strong" text="Movable Type">

なお、MTGetVarFunctionタグ内でパラメータとして渡した変数は、MTSetVarTemplateのモジュールの中でのみアクセスすることができます。
MTGetVarFunctionタグの処理が終わると、パラメータとして渡した変数はクリアされます。