MTLoop タグによる配列変数・ハッシュ変数の制御
Movable Type 4.0 では管理画面用だった MTLoop タグが、Movable Type 4.1 ではテンプレート上で利用できるようになりました。これにより配列やハッシュの取得が MTLoop タグで実現できるようになります。
以下、MTLoop での配列とハッシュの利用方法を紹介します。
1.配列を取得する
MTFor タグで設定し、MTLoop タグで取得するサンプルを示します。
<mt:for var="i" from="0" to="9">
<mt:setvar name="foo[$i]" value="$i">
</mt:for>
<mt:loop name="foo">
<mt:getvar name="__value__">
</mt:loop>
MTLoop タグの使い方は、name モディファイアに配列変数名を設定するだけで、ここでは foo を設定しています。
配列変数 foo の値は予約変数 __value__ に自動的に設定されるので、あとは MTGetVar タグの name モディファイアに指定するだけです。
MTLoop タグの部分を MTFor タグで書くと
<mt:for var="i" from="0" to="9">
<mt:setvar name="foo[$i]" value="$i">
</mt:for>
となるので、MTLoop タグの方が簡単に書けることがお分かりになると思います。
なお、MTLoopタグでは配列のインデックスが0から処理が開始されるため、設定側の MTFor タグの from モディファイアは「0」、to モディファイアは「9」を設定しています。
2.ハッシュを取得する
4.1 ベータ 2 から新しく追加された sethashvar タグ(ハッシュをまとめて定義できるタグ)を用いて、ハッシュを作成し、MTLoop タグで取得するサンプルを示します。
<mt:sethashvar name="week">
<mt:setvar name="mon" value="Monday">
<mt:setvar name="tue" value="Tuesday">
<mt:setvar name="wed" value="Wednesday">
<mt:setvar name="thu" value="Thursday">
<mt:setvar name="fri" value="Friday">
<mt:setvar name="sat" value="Saturday">
<mt:setvar name="sun" value="Sunday">
</mt:sethashvar>
<mt:loop name="week">
<$mt:getvar name="__key__"$> <$mt:getvar name="__value__"$>
</mt:loop>
テンプレートを再構築すると、下のように出力されます。
sun Sunday
fri Friday
tue Tuesday
sat Saturday
mon Monday
wed Wednesday
thu Thursday
配列変数の時と同様、name モディファイアに配列変数名を設定します。ここでは week を設定します。
配列変数 week のキーの値は予約変数 __key__ に、キーに対応する値は予約変数 __value__ に自動的に設定されるので、それぞれ MTGetVar タグの name モディファイアに指定します。
ハッシュは配列のような順序性がありませんが、sort_by モディファイアを設定することで、一定の規則にしたがって出力されます。
キーの文字列順で並べ替え
<mt:loop name="[変数名]" sort_by="key">
キーの文字列順(逆順)で並べ替え
<mt:loop name="[変数名]" sort_by="key reverse">
キーに対応する値の文字列順で並べ替え
<mt:loop name="[変数名]" sort_by="value">
キーに対応する値の文字列順(逆順)で並べ替え
<mt:loop name="[変数名]" sort_by="value reverse">
キーに対応する値の文字を数値として比較・並べ替え
<mt:loop name="[変数名]" sort_by="value numeric">
キーに対応する値の文字を数値として比較・並べ替え(逆順)
<mt:loop name="[変数名]" sort_by="value numeric reverse">
- Movable Type 4.15 公開ベータテスト開始
- Movable Type 4.1 リリース
- Movable Type 4.1 リリース候補第2版公開
- Movable Type 4.1 リリース候補版公開
- Movable Type 4.1 ベータ 3 リリース
- 予約変数一覧 for Movable Type 4.1
- Movable Type 4.1 ベータ 2 リリース
- Movable Type 4.1 / MTOS における変数での算術演算子の利用方法
- Movable Type 4.1 追加タグ一覧
- Movable Type 4.1 ベータテスト開始
この記事とは全然関係ないですが、cormun rizer のページが開けないのですが、こちらの不具合でしょうか?
>まさあきさん
こんにちは。
ご質問の件につきまして、申し訳ありませんがIE以外のブラウザ(Firefox/Opera等)でお試し頂けますでしょうか(IEではサーバ移転後にページが開けなくなってしまっていますが、解析時間がとれていません)。
それではよろしくお願い致します。
はじめまして。
ハッシュをkeyの順に並べ替え、並べ替えたものを配列の値を
配列の先頭から指定した数だけ取得するといった事は可能なのでしょうか?
MTLoopでkeyの順に並べた後に
<MTIf var="i" from="0" to="6">
<$MTVar name="[変数名]" index="$i"$>
</MTIf>
で値を取得しようとしたのですが上手くいかず
値を取得する方法をご教授頂ければと思いコメントさせて頂きました。
すみません。
上のコメントの修正と自己解決です。
修正
誤
<MTIf var="i" from="0" to="6">
<$MTVar name="[変数名]" index="$i"$>
</MTIf>
↓
正
<MTFor var="i" from="0" to="6">
<$MTVar name="[変数名]" index="$i"$>
</MTFor>
お恥ずかしい...
自己解決
MTLoop内で新たな配列を作り上手く表示ができました。
<MTLoop name="[変数名]" sort_by="key reverse">
<MTSetVarBlock name="push([変数名2])">
<$MTVar name="__value__"$>
</MTSetVarBlock>
</MTLoop>
<MTFor var="i" from="0" to="6">
<$MTVar name="[変数名2]" index="$i"$>
</MTFor>
もっと効率的な方法もあるとは思いますが...
>kikiさん
こんばんは。
ご連絡ありがとうございました。
ご質問の件、自己解決されたようで良かったです。
最初の間違いは気がつきませんでした(笑)。