変数処理を改良するプラグイン(その1)

2005年12月28日 12時20分
以下の不具合があったので修正しました。
・MTIfNumVarrタグで、比較対照の値が0の時に正しく比較ができていませんでした。
・MTIfStrVarrタグで、比較対照の値が空文字列の時に正しく比較ができていませんでした。

Movable Typeでは、「MTSetVar」「MTGetVar」というテンプレートタグを使うことで、テンプレート内で「変数」を扱うことができます。
ただ、この2つのタグだけでは、変数の使い道が限定的になります。
そのためか、これらのタグはあまり使われていないようです。

そこで、変数の扱いを改良するプラグインを作成しました。
今日は、変数の概要と、このプラグインのテンプレートタグの書き方を解説します。

1.MTSetVar/MTGetVarタグについて

まず、このプラグインの前段階として、MTSetVar/MTGetVarタグの使い方を解説しておきましょう。

MTSetVar/MTGetVarタグは、「変数」を扱うタグです。
変数とは、値を入れておく入れ物のことです。

MTSetVarタグは、変数に値を入れる働きをします。書き方は以下のようになります。

<MTSetVar name="変数名" value="変数に入れる値">

一方、MTGetVarタグは、変数の値をページに出力するものです。書き方は以下のようになります。

<MTGetVar name="変数名">

例えば、テンプレートに以下のような部分を入れるとします。

<MTSetVar name="var" value="ABC">
<MTGetVar name="var">

この場合、1行目のMTSetVarタグで、変数varに「ABC」という値が入ります。
次に、2行目のMTGetVarタグで、変数varの値が出力されます。1行目で変数varに「ABC」を入れましたので、このタグによって「ABC」が出力されることになります。

2.VarHandlerプラグインのインストール

MTSetVar/MTGetVarタグでは、変数に値を入れることと、その値を出力することができます。
ただ、変数間で計算をしたり、変数の値で条件判断したりする機能がありません。
そこで、それらの機能を持ったプラグインとして、「VarHandler」というものを作りました。

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

VarHandler.txt

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

表示されたソースをすべてコピーしてメモ帳等に貼り付け、「VarHandler.pl」のファイル名をつけて保存してください。
そして、Movable Typeの「plugins」ディレクトリにアップロードしてください。

3.変数間で計算するタグ

このプラグインをインストールすると、いくつかのテンプレートタグが追加されます。
まず、変数間で計算をするタグとして、以下の5つが追加されます。

テンプレートタグ計算の種類
MTAddVar足し算
MTSubVar引き算
MTMultVar掛け算
MTDivVar割り算
MTConcatVar文字として連結

いずれのタグも、「name」と、「value」または「name2」のアトリビュートをとります。
<MT○○○Var name="変数名" value="値">とすると、変数と値との間で計算が行われ、その結果が変数に入れなおされます。
また、<MT○○○Var name="変数1" name2="変数2">とすると、変数1と変数2との間で計算が行われ、その結果が変数1に入れなおされます。

例えば、以下のようにタグを組み合わせるとします。

<MTSetVar name="var" value="2">
<MTAddVar name="var" value="3">

この場合、1行目のMTSetVarタグで、変数varの値が2になります。
そして、2行目のMTAddVarタグで変数varに3が足され、値が5に変わります。

例えば、以下のようにタグを組み合わせるとします。

<MTSetVar name="var1" value="ABC">
<MTSetVar name="var2" value="DEF">
<MTConcatVar name="var1" name2="var2">

この場合、1行目と2行目のMTSetVarタグで、変数var1/var2の値が、それぞれ「ABC」/「DEF」になります。
そして、3行目のMTConcatVarタグで変数var1の値(「ABC」)に変数var2の値(「DEF」)が連結され、変数var1の値は「ABCDEF」になります。

なお、これらのタグは計算を行うだけで、計算結果は出力しません。
出力はMTGetVarタグで行います。

3.変数の値を条件判断に使うタグ

変数の値で条件を判断して、処理を分けるようにすることもできます。
そのためのタグとして、以下の2つがあります。

テンプレートタグ条件判断の種類
MTIfNumVar変数の値を数値として他の値や変数と比較
MTIfStrVar変数の値を文字列として他の値や変数と比較

いずれのタグも、「name」と、「value」または「name2」のアトリビュートをとります。
<MTIf○○○Var name="変数名" value="値">とすると、変数と値とを比較して、等しいかどうかで処理が分けられます。
また、<MTIf○○○Var name="変数1" name2="変数2">とすると、変数1と変数2の値を比較して、等しいかどうかで処理が分けられます。

例えば、以下のようにタグを組み合わせるとします。

<MTIfNumVar name="var" value="1">
ABC
<MTElse>
DEF
</MTElse>
</MTIfNumVar>

この場合、変数varの値が1になっていれば「ABC」が出力され、そうでなければ「DEF」が出力されます。

4.値を入れるタグ

変数に値を入れるタグとして、前述のMTSetVarタグがありますが、それを拡張した「MTEqualVar」「MTTagValueVar」というタグも追加されます。
<MTEqualVar name="変数1" name2="変数2">とすることで、変数1に変数2の値を入れることができます。
また、MTTagValueVarタグはコンテナタグで、コンテナ内の内容(テンプレートタグを含む)を変数に入れることができます。
例えば、以下のようにタグを組み合わせると、変数countにはBlog全体のエントリー数が入ります。

<MTTagValueVar name="count"><MTBlogEntryCount></MTTagValueVar>

MTTagValueVarタグとMTIf○○○Varタグを組み合わせると、「テンプレートタグの値が○○○かどうかで処理を分ける」といったことができます。

明日は、これらのタグを使った具体的な例を紹介する予定です。