TopMovable Typeテンプレートタグ > Movable Type 4.1 / MTOS における配列とハッシュの利用方法
2007年12月18日

Movable Type 4.1 / MTOS における配列とハッシュの利用方法

Posted at December 18,2007 1:11 AM
Category:[4.1, MTOS, テンプレートタグ]
Tag:[, , ]

公にアナウンスされていないようですが、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">

と書いても同じです。

以上です。
さらに複雑な制御も可能と思われますがとりあえずこの辺で。

Posted by yujiro
関連記事
人気エントリー
トラックバックURL


コメントする

*必須



お知らせ:2008年5月現在、多忙のため、7月頃までコメントを速やかに回答できない状態が続きます。ご質問の内容によっては回答が7月以降になる可能性がありますので、予めご了承ください。

太字 イタリック アンダーライン ハイパーリンク 引用

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)

Now loading...
Entries of this Category
QRcode

現在停止中です
携帯電話からこのQRcodeを撮影することで携帯用URLを取得することができます

URI for cellular phones
ギターに入った猫
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner

loading ...
BlogPeople
Now loading...
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
クリエイティブ・コモンズ・ライセンス
Powered by
Movable Type 4.1
 
List Me!