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

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

Posted at December 18,2007 1:11 AM
Tag:[hash, MovableType, 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">

と書いても同じです。

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

関連記事
トラックバックURL


トラックバック

Movable Type4:配列の設定、取得、関数 from モカモカ工房
配列の設定と要素の取得 [設定]$mt:Setvarを使います。nameという... [続きを読む]

Tracked on September 16, 2008 4:11 PM
コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

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

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