Movable Type の配列変数のコピーの仕方

Movable Type で配列の変数をコピーする時は注意が必要です。

例えば、下記のようにして配列を作ります。

<mt:SetVar name="team1" note="初期化">
<mt:SetVar name="team1" function="push" value="バッジョ">
<mt:SetVar name="team1" function="push" value="クライフ">
<mt:SetVar name="team1" function="push" value="ジーコ">

この配列の要素数を下記のように出力すると、

チーム1に登録された選手は「<mt:Var name="team1" function="count">」人です。

出力結果は、

チーム1に登録された選手は「3」人です。

となります。この team1 配列変数を team2 にコピーします。このとき、下記のようにコピーしてみます。

<mt:Var name="team1" setvar="team2">

team2 の要素数を出力してみようとしたところ、

チーム2に登録された選手は「<mt:Var name="team2" function="count">」人です。

出力結果は、

チーム2に登録された選手は「バッジョクライフジーコ」人です。

となってしまいます。つまり、配列変数を mt:Var してしまうと文字列になってしまい、その文字列が team2 にセットされてしまったのです。

配列をコピーする時は下記のようにします。

<mt:SetVar name="team2" value="$team1">

こうすると、

チーム2に登録された選手は「<mt:Var name="team2" function="count">」人です。

の出力結果は、

チーム2に登録された選手は「3」人です。

となります。

なお、このコピーが配列変数の参照のコピーなのか、値そのもののコピーなのかを調べてみます。

<mt:SetVar name="team1" function="push" value="ストイコビッチ">

このように team1 にだけ選手を追加して team1team2 を出力してみると、

チーム1に登録された選手は「<mt:Var name="team1" function="count">」人です。
チーム2に登録された選手は「<mt:Var name="team2" function="count">」人です。

結果は、

チーム1に登録された選手は「4」人です。
チーム2に登録された選手は「3」人です。

となり、元の配列を参照しているわけではなく、新たに配列が作られたことが分かります。

最後にコードをまとめておきます。

<mt:SetVar name="team1" note="初期化">
<mt:SetVar name="team1" function="push" value="バッジョ">
<mt:SetVar name="team1" function="push" value="クライフ">
<mt:SetVar name="team1" function="push" value="ジーコ">
チーム1に登録された選手は「<mt:Var name="team1" function="count">」人です。
<mt:Ignore>===== この方法はNG
  <mt:Var name="team1" setvar="team2">
=====</mt:Ignore>
<mt:SetVar name="team2" value="$team1">
<mt:SetVar name="team1" function="push" value="ストイコビッチ">
チーム1に登録された選手は「<mt:Var name="team1" function="count">」人です。
チーム2に登録された選手は「<mt:Var name="team2" function="count">」人です。

以上です。

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