Smartyでの中括弧(波括弧)について

シェアする

今のお仕事で久しぶりにSmartyを使用しています。

Smartyを使用していて、JavaScriptやCSSの表記で中括弧(波括弧)を使用する時には、注意が必要です。
Smartyのデフォルトでは、中括弧(波括弧)はデリミタとして判断されるため、普通にテンプレート内のJavaScriptやCSSで中括弧(波括弧)使用してしまうとエラーとなります。

Smartyを使用し、CSS・JavaScriptで中括弧(波括弧)を使用する例

CSSやJavaScriptでも括弧(波括弧)を使用することがあります。

このような場合、中括弧(波括弧)を使用する際、{literal}{/literal}で中括弧(波括弧)の処理を挟むこと、または、中括弧(波括弧)の前後にスペースを入れないとエラーが出て処理ができません。

下記のようにすることで、エラーを回避することが出来ます。

<script>
   // 次の波括弧は Smarty に無視されます
   // その両側に空白文字があるからです
   function foobar {
	alert('foobar!');
   }
   // こちらの場合はリテラルとして扱うエスケープが必要です
   {literal}
	function bazzy {alert('foobar!');}
   {/literal}

</script>

エラーを回避するためにデリミタを変更してしまう

上記の例のように中括弧を使用するのにエラーを回避する方法の他に、デリミタを変更してしまうという方法もあります。

<?php

$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';

$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');

?>

上記のように、left_delimiterとright_delimiterを設定することで、Smartyのデリミタを変更することが出来ます。

EC-CUBE(2系?)などでも、Smarty.class.phpの内容を上記のように設定しているそうです。

Smartyを使用していている方には、中括弧(波括弧)を使用するとエラーになることがあると覚えておくと良いと思います。

シェアする

フォローする