Smartyデリミタ
2015年02月18日 22:21
Smartyのデフォルトのデリミタは「{」「}」。
問題点
JavaScriptやCSSを記述する場合は「{literal}{/literal}」で囲わなければエラーになってしまいます。
数年前、Smartyを採用しているOSコマースというECシステムを触っていて、この問題に遭遇したことがありました。 ヘッダー部分にGoogleAnalyticsのトラッキングコードを貼り付けたところ、見事にエラーを吐いてしまいました。
ゲロゲロ~
かと言っていちいち「{literal}{/literal}」使うのは面倒だと思います。
解決方法
デリミタを変更しましょう。
デリミタを変更する
自分が使用しているデリミタ「{[」と「]}」を例として挙げてみます。
コード例(PHP側)
$smarty = new Smarty(); $smarty->left_delimiter = '{['; $smarty->right_delimiter = ']}'; /* ------------------------------------ ※その他のSmarty関連の設定は割愛 ------------------------------------ */ $smarty->assign('hoge', 'ほげほげ');
コード例(テンプレート側)
[{$hoge|escape}]
出力例
ほげほげ
その他デリミタの例
Smartyを採用している一部CMSでは以下の様にデリミタを変更しています。
EC-CUBE
<!--{$hoge|escape}-->
XOOPS
<{$hoge|escape}>
EC-CUBEは仕事でよく触るのだけれども、ちょっと面倒な印象ですね。
対応バージョン
Smarty2、Smarty3