Movable Type 4.1 / MTOS における配列とハッシュの利用方法
公にアナウンスされていないようですが、MT4.1/MTOS では変数で配列とハッシュの操作が可能になり、変数処理がよりプログラマブルになりました。
ということで、以下に利用方法をまとめてみました。
1.配列
配列とは、同じ型のデータを連続的に並べた集合を指します。同一の変数名にインデックス(添え字)を付与することでデータを識別することができます。
例えば、week という変数に、Monday から Sunday までの文字列を設定するには、
week[0] = 'Monday'
week[1] = 'Tuesday'
week[2] = 'Wednesday'
week[3] = 'Thursday'
week[4] = 'Friday'
week[5] = 'Saturday'
week[6] = 'Sunday'
という感じになります。
MTSetVar による配列の設定
MTSetVar タグで配列を設定する方法は2通りあります。name モディファイアの変数名に直接インデックスを記述して、value モディファイアに値を設定するか(下)、
<MTSetVar name="week[0]" value="Mon">
<MTSetVar name="week[1]" value="Tue">
<MTSetVar name="week[2]" value="Wed">
:
index モディファイアを記述し、そこにインデックスを設定します(下)。value モディファイアは同じです。
<MTSetVar name="week" index="0" value="Mon">
<MTSetVar name="week" index="1" value="Tue">
<MTSetVar name="week" index="2" value="Wed">
:
MTSetVarBlock による配列の設定
MTSetVar タグに配列を設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接インデックスを記述し、value モディファイアの代わりにブロック内に値を記述します。
<MTSetVarBlock name="week[0]">
:
</MTSetVarBlock>
<MTSetVarBlock name="week[1]">
:
</MTSetVarBlock>
<MTSetVarBlock name="week[2]">
:
</MTSetVarBlock>
:
または、index モディファイアを記述し、そこにインデックスを設定します(下)。
<MTSetVarBlock name="week" index="0">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" index="1">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" index="2">
:
</MTSetVarBlock>
:
MTFor による配列の設定
単純な数値であれば MTFor で設定することも可能です。
下記に、0~6の値を配列に設定するサンプルを示します。MTFor タグの var モディファイアの変数名に配列のインデックスが設定されます。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTSetVar を記述して、配列のインデックスとなる $x を記述します。
<mt:for var="x" from="0" to="6">
<MTSetVar name="week[$x]" value="$x">
</mt:for>
MTSetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。
<mt:for var="x" from="0" to="6">
<MTSetVar name="week" index="$x" value="$x">
</mt:for>
繰り返し処理による配列の設定
下記に、ブログ記事タイトルを配列の値に設定するサンプルを示します。
<MTEntries>
<MTSetVarBlock name="counter"><$MTGetVar name="__counter__"$></MTSetVarBlock>
<MTSetVarBlock name="entrytitle[$counter]"><$MTEntryTitle$></MTSetVarBlock>
</MTEntries>
2行目の counter は、インデックス値となる __counter__ の値を3行目に直接設定できないため、MTSetVarBlock でワンクッションおいてます。3行目でブログ記事タイトルを配列に設定しています。
配列の取得
配列の内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにインデックスつきの変数名を指定します。
<MTGetVar name="week[0]">
<MTGetVar name="week[1]">
<MTGetVar name="week[2]">
:
実行結果
Mon
Tue
Wed
:
または、MTGetVar(または MTVar)で name モディファイアと別に index モディファイアにインデックス値を指定します。実行結果は同じです。
<MTGetVar name="week" index="0">
<MTGetVar name="week" index="1">
<MTGetVar name="week" index="2">
:
さらに MTFor タグを使うことで、繰り返しによる取得も可能です。
MTFor タグの var モディファイアの値が配列のインデックス値となります。from モディファイアに最小値、to モディファイアに最大値を設定し、MTFor ブロック内に MTGetVar を記述して配列の値を取得します。MTGetVar の name モディファイアにインデックス値となる $x を記述します。
<mt:for var="x" from="0" to="6">
<MTGetVar name="week[$x]">
</mt:for>
MTGetVar の name モディファイアと別に、index モディファイアに $x を記述してもOKです。
<mt:for var="x" from="0" to="6">
<MTGetVar name="week" index="$x">
</mt:for>
配列の要素数を求める
count 関数により、配列を設定した後の要素数を求めます。
フォーマットは、
<MTGetVar name="count(week)">
で、name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果
7
または、
<MTGetVar name="week" function="count">
と書いても同じです。function モディファイアに関数名 count を記述します。
配列の最後からデータを取得する
pop 関数により、配列の最後からデータを取得し、配列から取得データを削除します。
フォーマットは、
<MTGetVar name="pop(week)">
で、name モディファイアに関数名(pop)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんが配列のインデックスが-1されています)
Sun
または、
<MTGetVar name="week" function="pop">
と書いても同じです。function モディファイアに関数名 pop を記述します。
配列の先頭からデータを取得する
shift 関数により、配列の先頭からデータを取得し、配列から取得データを削除します。
<MTGetVar name="shift(week)">
で、name モディファイアに関数名(shift)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんが配列のインデックスが-1されています)
Mon
または、
<MTGetVar name="week" function="shift">
と書iいても同じです。
2.ハッシュ
ハッシュは、配列のインデックスが文字列となったものです。この文字列となったインデックスを「キー」と呼びます。先の1週間の例では、
week[mon] = 'Monday'
week[tue] = 'Tuesday'
week[wed] = 'Wednesday'
week[thu] = 'Thursday'
week[fri] = 'Friday'
week[sat] = 'Saturday'
week[sun] = 'Sunday'
となります。
MTSetVar にハッシュの設定
MTSetVar タグにハッシュを設定する方法は2通りあります。name モディファイアの変数名に直接キー({}で囲まれた部分)を記述するか(下)、
<MTSetVar name="week{mon}" value="Monday">
<MTSetVar name="week{tue}" value="Tuesday">
:
key モディファイアを記述し、そこにキーを設定します(下)。
<MTSetVar name="week" key="mon" value="Monday">
<MTSetVar name="week" key="tue" value="Tuesday">
:
MTSetVarBlock にハッシュの設定
MTSetVarBlock タグにハッシュを設定する方法も、MTSetVar タグと大体同じで、name モディファイアの変数名に直接キーを記述し、value 属性の代わりにブロック内に値を記述します。
<MTSetVarBlock name="week{mon}">
:
</MTSetVarBlock>
<MTSetVarBlock name="week{tue}">
:
</MTSetVarBlock>
:
または、key モディファイアを記述し、そこにキーを設定します(下)。
<MTSetVarBlock name="week" key="mon">
:
</MTSetVarBlock>
<MTSetVarBlock name="week" key="tue">
:
</MTSetVarBlock>
:
ハッシュの取得
ハッシュの内容を取得・表示するには、MTGetVar(または MTVar)で name モディファイアにキーつきの変数名を指定します。
<MTGetVar name="week{mon}">
<MTGetVar name="week{tue}">
:
実行結果
Monday
Tuesday
:
または、MTGetVar(または MTVar)で name モディファイアと別に key モディファイアにインデックス値を指定します。実行結果は同じです。
<MTGetVar name="week" key="mon">
<MTGetVar name="week" key="tue">
:
ハッシュの要素数を求める
ハッシュを設定した後の要素数は次の方法で求めます。
<MTGetVar name="count(week)">
name モディファイアに要素数を求める関数名(count)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果
7
または、
<MTGetVar name="week" function="count">
と書いても同じです。
ハッシュから要素を削除する
ハッシュから指定したキーの要素を取得し、同時にハッシュから該当要素を削除します。
<MTGetVar name="delete(week)" key="a">
name モディファイアに要素数を求める関数名(delete)と、関数のパラメータ(括弧内)に処理の対象となる配列の変数名を記述します。
実行結果(結果には表示されませんがハッシュのキーが削除されています)
Monday
または、
<MTGetVar name="week" key="a" function="delete">
と書いても同じです。
以上です。
さらに複雑な制御も可能と思われますがとりあえずこの辺で。
- Movable Type検索結果画面のMTIncludeタグでファイルを読み込む方法
- Movable Typeの月別コンテンツアーカイブリスト用テンプレート
- コンテンツデータでMTEntriesWithSubCategoriesの代替テンプレートタグ
- MTContentFieldタグの使い方
- Movable Typeでブログ記事一覧をカスタムフィールドでソートする方法
- MTの本文フィールドからimg要素のURLを取得する方法
- MTEntriesタグで指定した数の記事を除外して表示する方法
- Movable Typeのテンプレートタグの中でテンプレートタグを使う方法
- Movable Typeのテンプレートタグをテンプレートで生成する方法
- Movable TypeのMTEntriesタグで特定の複数ブログ記事を出力する方法
- Movable TypeでCSVデータからtable要素を作る方法
- MTIncludeタグのnameモディファイア
- Movable Type(MT)の特殊変数の入れ子
- ブロックタグにelseタグを組み込んで判定する
- Movable Type 5 におけるウェブサイトとブログの複数指定方法
≫ Movable Type4:配列の設定、取得、関数 from モカモカ工房
配列の設定と要素の取得 [設定]$mt:Setvarを使います。nameという... [続きを読む]