予約変数を使った繰り返し処理

MT — Tags: — chimanaco @ 2:21 PM このエントリをはてなブックマークに追加

久しぶりにMT弄ったついでに「CMSとして使うMovable Typeガイドブック」を読んでいたら便利そうなのがあったのでメモ。
繰り返し処理用のテンプレートタグ(<MTEntries>とか)には繰り返しの初回や偶数・奇数を判定するための予約変数というものがあります。それぞれ該当する繰り返し時に変数1を、該当しない場合0を取ります。

予約変数の種類
変数名 変数が取る値
__first__ 初回の繰り返しであれば1
__last__ 最後の繰り返しであれば1
__odd__ 奇数回の繰り返しであれば1
__even__ 奇数回の繰り返しであれば1
__counter__ 現在の繰り返し回数

ifタグを用いて、該当する繰り返し時に文字列を出力させてみる。

<MTEntries>
<$mt:GetVar name="__counter__"$>回目!
<mt:if name="__first__">
1回目の繰り返しで表示されるよ
</mt:if>
<mt:if name="__even__">
偶数回の繰り返しで表示されるよ
</mt:if>
<mt:if name="__odd__">
奇数回の繰り返しで表示されるよ
</mt:if>
<mt:if name="__last__">
最後の繰り返しで表示されるよ
</mt:if>
</MTEntries>

出力結果は以下のようになります。

1回目!
1回目の繰り返しで表示されるよ
奇数回の繰り返しで表示されるよ
2回目!
偶数回の繰り返しで表示されるよ
3回目!
奇数回の繰り返しで表示されるよ
4回目!
偶数回の繰り返しで表示されるよ
最後の繰り返しで表示されるよ

これを応用すればエントリー毎に背景を変えたい場合とかに使えます。
<div>に偶数回の時にはclass=”odd”、奇数回の時にはclass=”even”を付与することにし、さらに新しいものから番号をつけていくようにするには以下のようにすればいい。

<MTEntries>
<div class="<mt:if name="__even__">even</mt:if><mt:if name="__odd__">odd</mt:if>">
[<$mt:getVar name="__counter__"$>] <$mt:entryTitle>
</div>
</MTEntries>

出力結果は以下のようになります。

[1] いちばんあたらしい
[2] にばんめでもまだあたらしい
[3] さんばんめでも現役
[4] よんばんめだって負けてない

上の4つのパターンにはまらない場合(3の倍数の繰り返し時とか)はopモディフィアを使ってvalueに値を入れて、割り切れる時に実行という風にやればできそう。似たような実装を以前はCounterプラグインを使ってやった気がするけど今後はこっちで行こう。

CMSとして使うMovable Typeガイドブック
黒野 明子 荒木 勇次郎
翔泳社
売り上げランキング: 10792

0 Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Comments links could be nofollow free.

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2010 chimanaco blog | powered by WordPress with Barecity