Smartyデリミタ

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

スポンサードリンク