にっくさんのブログでMTテンプレートの中の変数についての記事が書かれていたのでそれに反応して、少しだけ応用について書いてみます。
$variable の使える場所
にっくさんのブログで紹介されている通り、$variableの形式で変数を利用するのケースとしては<mt:if />の中が多いのではないかと思いますが、実際はどのアトリビュートでも利用できます。
<mt:Ignore>例1</mt:Ignore>
<mt:SetVar name="category_label" value="CategorySearch" />
<mt:SubCategories category="$category_label" include_current="1">
<mt:CategoryLabel /> (<mt:EntriesCount />)
</mt:SubCategories>
<mt:Ignore>例2</mt:Ignore>
<mt:SetVar name"blog_ids" value="1","3","48","49" />
<ul>
<mt:Loop name="blog_ids">
<mt:Blogs blog_ids="$__value__">
<li><mt:BlogName /></li>
</mt:Blogs>
</mt:Loop>
</ul>
手元のテスト用のブログだと以下のようになります。
CategorySearch (5)
- MTOS - Test
- 2nd blog
- ACME - JA
- みんなのMT
注意点(不具合)
追記: 以下の不具合はMT5.0ベータ3以前で発生しています。MT5.0ベータ4以降では修正される見込みです。
この仕組みが利用できるとするとこのようなテンプレートでは、
<mt:For var="i" from="0" to="1">
<mt:For var="j" from="0" to="1">
<mt:SetVar name"i_j" value="$i","$j" />
<mt:Loop name="i_j">
<mt:Var name="__value__" />
</mt:Loop>
</mt:For>
</mt:For>
以下のような結果が期待されるのですが、
0 0 0 1 1 0 1 1
実際にはMT4.1(古いですが)ではこのように、
0 0 0 0 0 0 0 0
MT4.2やMT5.0ベータではこのように、
$i $j $i $j $i $j $i $j
なかなかうまくいかないので注意が必要です。
※不具合として報告したので修正される事を期待しています。
追記: 不具合の発生する条件
上の書き方だといつ不具合が起きるか分からないというような雰囲気でしたが、そういうことではありません。通常の<mt:If />内での利用で問題が発生することはありません。
上の例にある「attribute="$a","$b"」のように、「,」で区切って値を複数(配列として)指定する場合に不具合が発生します。
追記2: 修正される見込みです
不具合として報告したところ、修正を取り込んでもらうことができました。MT5.0の正式版リリース(おそらくベータ4以降)では上記の問題は修正されているはずです。
コメントする