[MT4]MTCounterプラグインを標準機能で実現

[MT4]ブログ記事を横に並べて高さを揃えるで、MTCounterプラグインを紹介しましたが、mixiでmiyaさんにコメントをいただいて、いろいろ調べた結果、MT4.1以降なら、標準機能で実現できることがわかりました。
ポイントは、opモディファイアです。
まず、<MTSetVar name=”xxx” value=”n”> で、変数を設定します。
xxx は任意の変数名、nは初期値です。
そして、ループの中で <MTSetVar name=”xxx” op=”++”>とやると、xxxの値が1加算されます。
値を評価するときは、MTIfタグを使います。
たとえば、xxxの値が、3で割り切れるかどうかを判断するには、
<MTIf name=”xxx” value=”3″ op=”mod” eq=”0″>
とすれば良いわけです。

Movable Typeのヘルプ「MT4.1で強化されるMTタグの新機能」によると、下記が使えます。

add または +
加算
sub または –
減算
mul または *
乗算
div または /
除算
mod または %
剰余
inc または ++
インクリメント
dec または —
デクリメント

これを、MTCounterプラグインの機能に置き換えてみると、

MTCounter → MTSetVar name=”xxx” value=”n”(初期値設定)
MTCounterValue → MTGetVar name=”xxx”(カウンタ値を表示)
MTCounterPlus → MTSetVar name=”xxx” op=”++”(加算)
MTCounterMinus → MTSetVar name=”xxx” op=”–“(減算)
MTCounterIfEqual → MTIf name=”xxx” eq=”x”(カウンタ値がxと同じ)
MTCounterIfLess → MTIf name=”xxx” lt=”x”(カウンタ値がxより小さい)
MTCounterIfMore → MTIf name=”xxx” gt=”x”(カウンタ値がxより大きい)
MTCounterIfOdd → MTIf name=”xxx” value=”2″ op=”mod” ne=”0″(奇数)
MTCounterIfEven → MTIf name=”xxx” value=”2″ op=”mod” eq=”0″(偶数)
MTCounterIfMod → MTIf name=”xxx” value=”n” op=”mod” eq=”x”(nで割った余りがx)

と言う感じで、いちおう、標準機能で代替出来ます。
奇数偶数の判断はできないので、2で割って余りが出るかどうかで判断します。

サンプル

ブログ記事一覧で、3件ごとにアホになる

<MTSetVar name="loopcount" value="0">
<MTEntries>
<MTEntryTitle><MTEntryBody>
<MTSetVar name="loopcount" op="++">
<MTIf name="loopcount" value="3" op="mod" eq="0">アホ!</MTIf>
</MTEntries>

ここで注意です。
MTSetVar に opモディファイアをつけると、演算した後の値が格納されます。
演算するだけで変数の値を変えたくない場合は、MTGetVarを使います。

書き方が煩雑ですが、汎用性がありそうですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です