Movable Type で空の配列を定義(mt:SetVar)する

Movable Type で空の配列の変数を定義したいと思うことはありませんか?

利用するケースは少ないかもしれませんが、Movable Type のテンプレートで JSON を書き出すときなどに役立つかもしれません。

ただし、この方法は MTAppjQuery プラグインの json_decode モディファイアが必要です。

テンプレート

例えば members という空の配列を定義したいときは下記のようになります。解説はコード中のコメント( mt:Ignore 内)をご確認ください。

<mt:Ignore>空の配列を意味する [] を empty_array という変数にセットしておく。</mt:Ignore>
<mt:SetVar name="empty_array" value="[]" />

<mt:Ignore>members 変数を初期化したい場所で json_decode モディファイアで [] を MT 変数に変換する。</mt:Ignore>
<mt:Var name="empty_array" json_decode="1" setvar="members" />

もしこの空の配列に値を追加していきたい場合は、下記のようにすればOKです。

<mt:SetVar name="members" function="push" value="tinybeans" />

余談ですが、普通に <mt:SetVar name="members" /> とだけ書いて初期化した場合でも上記のように function="push" で値を追加して行くことはできます。

しかし、何も値を追加しなかった場合、その変数を JSON として出力すると空文字として扱われてしまいます。

下記のテンプレートで比較してみます。

<mt:Ignore>変数を初期化</mt:Ignore>
<mt:SetVar name="empty_array" value="[]" />
<mt:SetVar name="entry" />

<mt:Ignore>hobbies を初期化して entry 変数の hobbies キーにセット</mt:Ignore>
<mt:SetVar name="hobbies">
<mt:SetVar name="entry" key="hobbies" value="$hobbies" />

<mt:Ignore>members を初期化して entry 変数の members キーにセット</mt:Ignore>
<mt:Var name="empty_array" json_decode="1" setvar="members" />
<mt:SetVar name="entry" key="members" value="$members" />

<mt:Ignore>JSON として出力</mt:Ignore>
<mt:Var name="entry" to_json="1" trim="1" />

結果は下記のようになります。

{
    hobbies: "",
    members: [ ]
}