PowerCMS™
2025年1月1日購入分よりライセンスの価格を改定いたします。
[ブログ] PowerCMS 6 でのアップデートまとめ を追加しました。
[よくあるご質問] システムログに「タスクを実行するために必要なロックを獲得できませんでした」というログが残っている を追加しました。
[よくあるご質問] 特定のシステムログに絞って確認できますか? を追加しました。

PowerCMS ブログ

ホーム > PowerCMS ブログ > DynamicMTML > テンプレート変数が配列やハッシュの時に値を取得する GetHashVar プラグイン

2015年10月14日

テンプレート変数が配列やハッシュの時に値を取得する GetHashVar プラグイン

MT や PowerCMS のテンプレートにおけるテンプレート言語 MTML(Movable Type Markup Language) では MTSetVarタグ等を用いて値を変数にセットすることができます。MTIfタグ や MTLoop タグ等のロジックも記述できるため、簡単なプログラム言語として処理を書くこともできます。

複雑なロジックはテンプレートに書かずにプラグインを書く

ただ、やりすぎる? とせっかくのテンプレートエンジンなのに「この変数はどこでセットされているの?」「どこを修正するとどうなるの?」ということになりかねません。わかりやすくテンプレートコメントを入れることやわかりやすい変数名をつけることは大切ですが、このようなことを避けるためには、複雑なロジックはテンプレートに書かずにプラグインを書くことを検討するのが良いでしょう。つまり、ロジックはプログラムで、ビュー(見た目)はテンプレートで、ということです。

配列やハッシュの値を取得する GetHashVar プラグイン

このプラグインは配列の n番目の値やハッシュのキーや値をダイレクトに取得するテンプレートタグを提供します。

ファンクションタグ

MTGetHashVar

変数名とキーを指定して値を出力します。ハッシュがネストされている場合は複数のキーを繋げて指定可能です。

<MTGetHashVar name="変数名" key="キー">
<MTGetHashVar name="変数名" key="キー1","キー2","キー3">

MTGetHashKey

変数名と値を指定してキーを出力します。複数の同じ値が存在した時は最初の値を出力します。

<MTGetHashKey name="変数名" var="値">

MTGetArrayVar

配列の n 番目の値を出力します。数字は0ではなく1からカウントします( num の代わりに index を指定すると 0 からカウントします)。

<MTGetArrayVar name="変数名" num="数字(1からカウント)">
または
<MTGetArrayVar name="変数名" index="数字(0からカウント)">

MTGetArrayJoin

配列を連結して出力します。

<MTGetArrayJoin name="変数名" glue="区切り文字">

MTAppendVar

配列を連結します。

<MTAppendVar name="new_name" var="old_var">

MTSplitVar

テンプレート変数を特定の区切り文字で分割し、配列にします。このタグは何も出力しません。set モディファイアを付与すると、その変数名にセットします。set モディファイア指定がない場合、元の変数名の変数を上書きします。

<MTSplitVar name="カンマ区切り文字列が格納された変数名" glue=",">

MTGetArrayRand

配列の要素をランダムにひとつ出力します。

<MTGetArrayRand name="変数名">

MTGetVarDump

テンプレートにセットされている変数をダンプしたデータを出力します。MTVarDump タグとの違いは name 属性を指定できる点です。

<MTGetVarDump name="変数名">

MTDeleteVars

テンプレート変数を未定義(空)にします。

<MTDeleteVars name="変数名1","変数名2">
もしくは
<MTDeleteVars name="変数名 変数名2">

MTArrayShuffle

テンプレート変数が配列のとき、並び順をランダムにします。このタグは何も出力しません。

<MTArrayShuffle name="変数名">

MTArraySearch

name を指定した配列に var モディファイアで指定した値が含まれる場合、配列の何番目に存在するかを返します。

MTArraySort

sort_order=ascend | descend を指定して配列をソートします。kind=str | numeric が指定できます。

MTArrayUnique

テンプレート変数が配列のとき、重複する値を削除します。このタグは何も出力しません。

<MTArrayUnique name="変数名">

MTArrayReverse

テンプレート変数が配列のとき、並び順を反転します。このタグは何も出力しません。

<MTArrayReverse name="変数名">

MTResetVars

テンプレート変数をリセットします(空にします)。このタグは何も出力しません。

MTSaveVars

テンプレート変数を一時保存します。次に MTRestoreVars が呼び出されたとき、一次保存されたテンプレート変数が再びセットされます。このタグは何も出力しません。

MTRestoreVars

MTResetVars または MTSaveVars 時点のテンプレート変数に戻します。このタグは何も出力しません。

MTMergeArray

name属性とset属性を指定して配列をマージします。このタグは何も出力しません。

<mt:MergeArray name="配列1","配列2" set="new_array">

MTMergeHash

name 属性と set 属性を指定してハッシュをマージします。このタグは何も出力しません。

<mt:MergeArray name="ハッシュ1","ハッシュ2" set="new_hash">

MTSubstrVar

name 属性と start 属性、length 属性を指定して文字列を抽出します。以下の例は「CMS」を出力します。

<mt:Setvar name="cms" value="PowerCMS">
<mt:SubstrVar name="cms" start="5" length="3">

MTSetPublishedEntryIds(MTSetPublishedPageIds)

MTEntries、MTPages に unique モディファイアを指定した時に指定した id の記事/ページを除外済みにします。このタグは何も出力しません。

<mt:SetVar name="entry_ids" function="push" value="1">
<mt:SetVar name="entry_ids" function="push" value="2">
<MTSetPublishedEntryIds entry_ids="$entry_ids">

<mt:Entries unique="1">
    # entry_idが 1, 2「以外」の記事を出力します。
</mt:Entries>

ブロックタグ

MTSetHashVars

MTSetVars と同じ形式で name を指定したハッシュ変数を組み立てます。

<mt:SetHashVars name="weather_description">
clear_sky=晴天
few_clouds=晴れ
scattered_clouds=曇り
broken_clouds=曇り
shower_rain=豪雨
rain=雨
thunderstorm=雷雨
snow=雪
mist=霧
</mt:SetHashVars>
weather_description => 
    array(9) {
      ["clear_sky"]=>
      string(6) "晴天"
      ["few_clouds"]=>
      string(6) "晴れ"
      ["scattered_clouds"]=>
      string(6) "曇り"
      ["broken_clouds"]=>
      string(6) "曇り"
      ["shower_rain"]=>
      string(6) "豪雨"
      ["rain"]=>
      string(3) "雨"
      ["thunderstorm"]=>
      string(6) "雷雨"
      ["snow"]=>
      string(3) "雪"
      ["mist"]=>
      string(3) "霧"
    }

MTYAML2Vars

YAMLで記述された文字列をテンプレート変数にセットします。このタグは何も出力しません。nameモディファイアを省略すると、ダイレクトにキーを指定してテンプレート変数にセットします。

<mtYAML2Vars name="yaml_sample">
key1: 値1
key2: 値2
key3:
    key4:
       - 値5
       - 値6
</mtYAML2Vars>
<mtGetVarDump name="yaml_sample">
yaml_sample => 
{
  'key1' => 値1,
  'key2' => 値2,
  'key3' => {
    'key4' => [
      値5,
      値6
    ]
  }
}

ブロックタグ(条件タグ)

MTIfKeyExists

<MTIfKeyExists name="変数名" key="キー">
    ハッシュ変数にキーが存在するとき
<MTElse>
    ハッシュ変数にキーが存在しないとき
</MTIfKeyExists>

MTIfVarExists (MTIfValueExists)

<MTIfVarExists name="変数名" var="値">
    ハッシュ変数に値が存在するとき
<MTElse>
    ハッシュ変数に値が存在しないとき
</MTIfVarExists>

MTIfIsInArray (MTIfInArray)

<MTIfIsInArray name="変数名" var="値">
    ハッシュ変数に値が存在するとき
<MTElse>
    ハッシュ変数に値が存在しないとき
</MTIfIsInArray>

MTIfVarIsScalar

<MTIfVarIsScalar name="変数名">
    変数がスカラー(文字列や数字)のとき
</MTIfVarIsScalar>

MTIfVarIsArray

<MTIfVarIsArray name="変数名">
    変数が配列のとき
</MTIfVarIsArray>

MTIfVarIsHash

<MTIfVarIsHash name="変数名">
    変数がハッシュのとき
</MTIfVarIsHash>

グローバルモディファイア

json2vars

JSON文字列をテンプレート変数にセットします。このタグは何も出力しません。

<mt:var name="JSON文字列が格納されている変数名" json2vars="変数名">

vars2json

テンプレート変数に格納された値をJSON文字列に変換します。

<mt:var name="ハッシュや配列が格納されている変数名" vars2json="1">

mtignore

テンプレートを評価しますが、値は出力しません。

<mt:Entries mtignore="テンプレートの処理についてのメモ">
    # Do Something.
</mt:Entries>

note

このモディファイアは何もしません。テンプレートタグにコメントやメモを付けるためだけのモディファイアです。

ts_format

出力結果がタイムスタンプの時、MTの日付に関するテンプレートタグのモディファイアと同じ結果を適用します。

MTEntries / MTPages に追加指定可能なモディファイア

entry_ids

配列にセットした id の記事/ページを出力対象とします。

<mt:SetVar name="entry_ids" function="push" value="1">
<mt:SetVar name="entry_ids" function="push" value="2">

<mt:Entries entry_ids="$entry_ids">
    # entry_idが 1, 2の記事を出力します。
</mt:Entries>

カテゴリー
DynamicMTML
プラグイン
技術情報

Recent Entries