MTSetVarにpushする前に変数を初期化するときのスタティックとダイナミックの違い

MTSetVarにpushする前に変数を初期化するときのスタティックパブリッシングとダイナミックパブリッシングの挙動の違いを紹介します。

Movable Type で MTSetVar に function="push" して配列を作っていくとき、事前に変数を初期化というか宣言しておくことがあります。

ことのき、以下のように書くと、スタティックパブリッシングだと問題ありませんが、ダイナミックパブリッシングだと「'mtlover' is not an array.」のようなメッセージでエラーになります。

<mt:SetVar name="mtlover" value="">
<mt:SetVar name="mtlover" function="push" value="bit">
<mt:SetVar name="mtlover" function="push" value="part"> <mt:Loop name="mtlover" glue="-"><mt:Var name="__value__"></mt:Loop>

これは1行目の value="" で文字列として初期化してるのが原因なので、value="" を削除して、

<mt:SetVar name="mtlover">
<mt:SetVar name="mtlover" function="push" value="bit">
<mt:SetVar name="mtlover" function="push" value="part"> <mt:Loop name="mtlover" glue="-"><mt:Var name="__value__"></mt:Loop>

というようにすればエラーはでなくなります。

まあ、変数を初期化しなくても良いのですが、「この後こういう変数を使うよ」というのは宣言しておいた方がテンプレートが見やすくなると思います。

2015/10/14 追記:ダイナミックの場合は初期化しないで function="push" するとエラーになりました。なので、最初の

<mt:SetVar name="mtlover">

は必須のようです。

以上、豆知識として。

Published 2014-02-11
Updated 2019-06-25

「Movable Type」カテゴリの記事一覧