testモディファイアの使い方

Movable Type 4.1以降では、テンプレート内で変数を扱う機能が強化されています。
その1つに「testモディファイア」があり、やや複雑な条件判断をしたい時に役立ちます。

testモディファイアの概要

testモディファイアは、Perlの条件判断の書き方を使って、条件を指定するためのモディファイアです。
testモディファイアを使うことで、MTIfタグの一般的な書き方ではできないような条件判断をできる場合があります。

変数の値の判断

変数の値を条件判断する際には、「$変数名 演算子 値」のように書きます。
「演算子」には、以下の表のいずれかを指定します。
また、値が文字列の場合は、その前後を「'」で囲みます。

比較方法数値として比較文字列として比較
等しい==eq
異なる!=ne
より大きい>gt
より小さい<lt
以上>=ge
以下<=le

例えば、「変数aの値が100以上」という条件判断を行いたい場合は、MTIfタグを以下のように書くことができます。

<mt:If test="$a >= 100">

配列の要素を条件判断に使いたい場合は、「$配列名->[インデックス]」のように書きます。
例えば、「配列aの中で、インデックスが1番の要素の値が『abc』に等しい」という条件判断を行いたい場合は、MTIfタグを以下のように書きます。

<mt:If test="$a->[1] eq 'abc'">

また、ハッシュの要素を条件判断に使いたい場合は、「$ハッシュ名->{キー}」のように書きます。
キーに半角英数字とアンダースコア以外の文字が含まれる場合は、キーの前後を「'」で囲みます。
例えば、「ハッシュaの中で、キーが「abc」の要素の値が10未満」という条件判断を行うには、MTIfタグを以下のように書きます。

<mt:If test="$a->{abc} < 10">

配列のインデックスや、ハッシュのキーは、変数で指定することもできます。
その場合は、「$配列名->[$変数名]」や「$ハッシュ名->{$変数名}」のように書きます。

関数での条件判断

testモディファイアでは、条件判断の中でPerlの関数を使うこともできます。
例えば、変数aに文字列が代入されているとして、その長さ(バイト数)が5以上かどうかを判断するには、以下のように書くことができます。

<mt:If test="length($a) >= 5">

ただし、セキュリティ的に問題が起こりえる関数など、使用することを制限されている関数もあります。
そのような関数を使おうとすると、MTIfタグでエラーが発生します。