Movable Type の配列変数を MTUnless で判定するときのスタティックとダイナミックの違い

Movable Type のテンプレートで配列を変数に入れて扱っているときに、以下のような MTUnless の判定を入れてみます。

<mt:SetVar name="array">
<mt:SetVar name="array" function="push" value="soccer">

<mt:Unless name="array">
Stefan Edberg
<mt:Else>
Robert Baggio
</mt:Unless>

これをスタティックパブリッシングで再構築すると、変数 array には soccer という値が入っているので、 MTElse タグの方が評価されて「Robert Baggio」と表示されます。

しかし、これをそのままダイナミックパブリッシングにすると、

preg_match() expects parameter 2 to be string, array given

というエラーが表示されてしまいます。

これを回避するには、以下のようなテンプレートにして、一度配列の一番目の要素を array_exist 変数にセットして、その変数の有無をチェックするようにすればエラーはでなくなります。

<mt:SetVar name="array">
<mt:SetVar name="array" function="push" value="soccer">

<mt:Var name="array" index="0" setvar="array_exist">
<mt:Unless name="array_exist">
Stefan Edberg
<mt:Else>
Robert Baggio
</mt:Unless>

以上、豆知識として。

  • このエントリーをはてなブックマークに追加
Just a second...