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
にだけ選手を追加して team1
と team2
を出力してみると、
チーム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">」人です。
以上です。