Movable Typeで繰り返し処理を行えるMTLoopとMTForを試してみます。
MTLoop
まずはMTLoopを使ってみます。
MTLoopはハッシュや配列を指定して、その内容で繰り返し処理ができます。
MTSetVarでハッシュ変数を設定して、MTLoopで処理してみます。
<mt:SetHashVar name="wataten"> <mt:SetVar name="hana" value="白咲 花"> <mt:SetVar name="hinata" value="星野 ひなた"> <mt:SetVar name="noa" value="姫坂 乃愛"> </mt:SetHashVar> <ul> <mt:Loop name="wataten"> <li> __first__:<mt:Var name="__first__"> __last__:<mt:Var name="__last__"> __odd__:<mt:Var name="__odd__"> __even__:<mt:Var name="__even__"> __key__:<mt:Var name="__key__"> __value__:<mt:Var name="__value__"> </li> </mt:Loop> </ul>
再構築を行うと、以下のように生成されます。
<ul> <li> __first__:1 __last__: __odd__:1 __even__: __key__:hana __value__:白咲 花 </li> <li> __first__: __last__: __odd__: __even__:1 __key__:noa __value__:姫坂 乃愛 </li> <li> __first__: __last__:1 __odd__:1 __even__: __key__:hinata __value__:星野 ひなた </li> </ul>
上記で試したように、MTLoop内では特別な変数を使用できます。
__first__ | ループの最初である場合に1(true)になる。 |
---|---|
__last__ | ループの最後である場合1(true)になる。 |
__odd__ | ループの奇数番目である場合に1(true)になる。 |
__even__ | ループの偶数番目である場合に1(true)になる。 |
__key__ | 現在のキー名を表示。 |
__value__ | 現在の値を表示。 |
先ほどはハッシュを試したので、配列でも同様に試してみます。
<mt:SetVarBlock name="wataten" index="0">白咲 花</mt:SetVarBlock> <mt:SetVarBlock name="wataten" index="1">星野 ひなた</mt:SetVarBlock> <mt:SetVarBlock name="wataten" index="2">姫坂 乃愛</mt:SetVarBlock> <ul> <mt:Loop name="wataten"> <li> __first__:<mt:Var name="__first__"> __last__:<mt:Var name="__last__"> __odd__:<mt:Var name="__odd__"> __even__:<mt:Var name="__even__"> __key__:<mt:Var name="__key__"> __value__:<mt:Var name="__value__"> </li> </mt:Loop> </ul>
再構築を行うと、以下のように生成されます。
<ul> <li> __first__:1 __last__: __odd__:1 __even__: __key__: __value__:白咲 花 </li> <li> __first__: __last__: __odd__: __even__:1 __key__: __value__:星野 ひなた </li> <li> __first__: __last__:1 __odd__:1 __even__: __key__: __value__:姫坂 乃愛 </li> </ul>
配列はハッシュと違いキーがないため、再構築すると__key__は表示されません。
最後にモディファイアの中からsort_byを使ってみます。
sort_byにkeyを指定するとキーの文字列で、valueを指定すると値の文字列で並び替えます。
またreverseを併用すると、並び順を逆にできます。
<mt:SetHashVar name="wataten"> <mt:SetVar name="hana" value="白咲 花"> <mt:SetVar name="hinata" value="星野 ひなた"> <mt:SetVar name="noa" value="姫坂 乃愛"> </mt:SetHashVar> <ul> <mt:SetVar name="counter" value="0"> <mt:Loop name="wataten" sort_by="key reverse"> <li> counter:<mt:Var name="counter"> __key__:<mt:Var name="__key__"> __value__:<mt:Var name="__value__"> </li> <mt:SetVar name="counter" op="inc"> </mt:Loop> </ul>
再構築を行うと、以下のように生成されます。
<ul> <li> counter:0 __key__:noa __value__:姫坂 乃愛 </li> <li> counter:1 __key__:hinata __value__:星野 ひなた </li> <li> counter:2 __key__:hana __value__:白咲 花 </li> </ul>
MTFor
次にMTForを使ってみます。
MTForは一般的なプログラミング言語にあるforと同じで、指定した数値の範囲内で繰り返し処理ができます。
<ul> <mt:For var="i" from="2" to="4"> <li> i:<mt:Var name="i"> __first__:<mt:Var name="__first__"> __last__:<mt:Var name="__last__"> __odd__:<mt:Var name="__odd__"> __even__:<mt:Var name="__even__"> __index__:<mt:Var name="__index__"> __counter__:<mt:Var name="__counter__"> </li> </mt:For> </ul>
再構築を行うと、以下のように生成されます。
<ul> <li> i:2 __first__:1 __last__: __odd__:1 __even__: __index__:2 __counter__:1 </li> <li> i:3 __first__: __last__: __odd__: __even__:1 __index__:3 __counter__:2 </li> <li> i:4 __first__: __last__:1 __odd__:1 __even__: __index__:4 __counter__:3 </li> </ul>
MTLoopの時と同様に、MTFor内では特別な変数を使用できます。
__first__、__last__、__odd__、__even__についてはMTLoopで説明しているので省きます。
__index__ | 現在のインデックスを表示。 |
---|---|
__counter__ | 現在のループ回数を表示。 |
__index__と__counter__の違いは上記サンプルを見ればわかると思いますが、__index__はvarで設定している変数(上記サンプルの場合はi)の値、__counter__はループ自体の回数になります。
ループごとに増加する数値を指定できるincrementを使ってみます。
<ul> <mt:For var="i" from="0" to="7" increment="3"> <li>i:<mt:Var name="i"></li> </mt:For> </ul>
デフォルトだと1ずつ増加しますが、3ずつ増加するようになりました。
<ul> <li>i:0</li> <li>i:3</li> <li>i:6</li> </ul> <ul>
最後に配列をMTForで処理してみます。
<mt:SetVarBlock name="wataten" index="0">白咲 花</mt:SetVarBlock> <mt:SetVarBlock name="wataten" index="1">星野 ひなた</mt:SetVarBlock> <mt:SetVarBlock name="wataten" index="2">姫坂 乃愛</mt:SetVarBlock> <ul> <mt:SetVarBlock name="charaCount"><mt:Var name="wataten" function="count" op="dec"></mt:SetVarBlock> <mt:For var="i" from="0" to="$charaCount"> <li><mt:Var name="wataten" index="$i"></li> </mt:For> </ul>
ポイントとしてはMTForのtoの値を配列の個数-1にしている点です。
変数内の配列の個数はMTVarのcount関数で取得でき、さらにopモディファイアの演算で-1しています。
再構築を行うと、以下のように生成されます。
<ul> <li>白咲 花</li> <li>星野 ひなた</li> <li>姫坂 乃愛</li> </ul>
【参考サイト】
- MTLoop – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- MTFor – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- MTSetVar – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- MTVar – テンプレートタグリファレンス | CMSプラットフォーム Movable Type ドキュメントサイト
- テンプレートタグで利用できる演算関数 | CMSプラットフォーム Movable Type ドキュメントサイト
コメントが承認されるまで時間がかかります。