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 ドキュメントサイト
コメントが承認されるまで時間がかかります。