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
- プラグイン
- 技術情報
コメントを投稿する