2015年11月19日
Movable Type のテンプレート変数を局所化する
案件規模が拡大するにつれてテンプレートは肥大化していく傾向があると思います。 MTEntries 等のタグはMTタグの知識のある人であればどういう出力がなされるかを理解することができますが、テンプレート変数の MTLoop でのループ出力などはその変数をセットする処理を書いた人しか把握できていないことも多く、出力不具合の調査で該当箇所を探すところから始めないといけませんが、該当箇所がインクルードされたテンプレートにあるなど、そこで苦労することもあるのではないでしょうか。
変数を変更していいのかがわからないケース
PowerCMS や先日公開した GetHashVar プラグインでは、テンプレート変数をダンプ出力するタグを提供していますが、他の人の書いたテンプレートを触る時、テンプレート変数の値を修正箇所で変更していいのかどうかがわからないという悩みを先日聞きました。
テンプレート変数を柔軟に扱う GetHashVar プラグイン
MTのテンプレート変数を局所化する MTLocalVars ブロックタグ
テンプレート変数を局所化する MTLocalVars ブロックタグほか、GetHashVar プラグインに新たなタグをいくつか追加しました。
<mt:Setvar name="foo" value="bar">
1.<mt:var name="foo">
<mt:LocalVars>
<!-- mt:LocalVars 内でセットされた値はブロック外では破棄される-->
<mt:Setvar name="foo" value="buz">
2.<mt:var name="foo">
</mt:LocalVars>
<!-- mt:LocalVars ブロック外では元の値が再度セットされる-->
3.<mt:var name="foo">
出力結果は下記になります。
1.bar (初期値)
2.buz (mt:LocalVars内でセットした値)
3.bar (元に戻っている)
他に、MTUnset ブロックタグも用意しました。このタグの中ではテンプレート変数は空になり、ブロックを抜けると元のテンプレート変数がセットされます。
MTSaveVars、MTResetVars、MTRestoreVars ファンクションタグ
これらは、MTLocalVars、MTUnsetタグと同様の目的に利用できるファンクションタグです。keyモディファイアを指定してテンプレート変数を一時保存し、必要な箇所でリストアします。MTResetVars と MTSaveVars の違いは、MTResetVars はテンプレート変数をキャッシュに保存したうえで空にします。MTSaveVars は変数はそのままでキャッシュに保存します。
<mt:SetVar name="foo" value="bar">
1.<mt:GetVarDump>
<mt:ResetVars key="html_header">
2.<mt:GetVarDump>
<mt:RestoreVars key="html_header">
3.<mt:GetVarDump>
出力結果は下記になります。
1. $VAR1 = { 'foo' => 'bar' }; (初期値)
2. $VAR1 = {}; (空になっている)
3. $VAR1 = { 'foo' => 'bar' }; (元に戻っている)
スタティックパブリッシング、ダイナミックパブリッシングの両方に対応しています。
コメントを投稿する