今のお仕事で久しぶりに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を使用していている方には、中括弧(波括弧)を使用するとエラーになることがあると覚えておくと良いと思います。