条件を満たす間繰り返しを行うプラグイン

Movable Typeには「条件を満たす間、繰り返しを行う」というテンプレートタグがありません(PerlやPHP等のwhile文に相当する処理がありません)。
そこで、このような処理を行うテンプレートタグを、プラグインで追加できるようにしてみました。

2011年10月3日 15時30分
一か所不具合を見つけたので修正しました。

1.プラグインのインストール

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

While_1_00.zip

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

なお、このプラグインは、Movable Type 4以降なら動作するはずです。
こちらでは、Movable Type 5.12で動作を確認しました。

2.追加されるテンプレートタグ

このプラグインをインストールすると、以下の4つのテンプレートタグ(ブロックタグ)が追加されます。

テンプレートタグ内容
MTWhile条件を満たす間繰り返しを行う(繰り返しの最初に条件を判断)
MTUntil条件が満たされるまで繰り返しを行う(繰り返しの最初に条件を判断)
MTDoWhile条件を満たす間繰り返しを行う(繰り返しの最後に条件を判断)
MTDoUntil条件が満たされるまで繰り返しを行う(繰り返しの最後に条件を判断)

条件の書き方は、MTIfタグと同じです。
例えば、「変数ctrの値が5以下の間繰り返す」という場合だと、以下のように書きます。

<mt:While name="ctr" le="5">
  繰り返す処理
</mt:While>

WhileとUntilは、「条件を満たす間」と「条件が満たされるまで」という点が違います。
Whileの条件を逆にすると、Untilと同じ動作になります。

また、Doがつかないタグとつくタグとでは、条件を判断するタイミングが異なります。
Doがつかないタグでは、繰り返しの先頭で条件を判断します。
一方、Doがつくタグでは、繰り返しの最後で条件を判断します。

Doがつかないタグだと、最初の時点で条件を満たしていれば、繰り返しを1回も行わないこともあり得ます。
一方、Doがつくタグでは、最低1回は繰り返しが行われます。

3.繰り返しの中で使える変数

MTWhileタグ等の繰り返しの中では、以下の変数を使うことができます。
なお、変数名の前後の「__」はアンダースコア2つです。

変数名内容
__counter__繰り返し回数
__odd__奇数回目の繰り返しなら1、そうでなければ値なし
__even__偶数回目の繰り返しなら1、そうでなければ値なし

4.利用可能なモディファイア

MTWhile等のタグでは、以下のモディファイアを指定することができます。

モディファイア名内容
glue繰り返し各回の出力の間に出力する文字列
limit繰り返し回数の上限
このモディファイアを指定しない場合、デフォルトでは上限は1000回になります