Smartyの構文解析を回避

時々、別の方法で構文解析されるある部分を Smarty に無視させたいと望んだり必要とさえする事があります。 典型的な例としては、テンプレートにJavascriptやCSSコードが含まれるときです。 それらの言語がSmartyのデフォルトのデリミタでもある{}を使用するときに問題が発生します。

もっとも単純な解決方法は、JavascriptとCSSコードをそれぞれファイルに切り分け、 それらにアクセスするために標準的なHTMLメソッドを使用する事で状況を回避する事です。

リテラルなコンテンツを含むために {literal} .. {/literal} ブロックを 使用する事が可能です。 HTMLエンティティの用法と同様に、今までのようなデリミタを表示するために {ldelim}{rdelim} または、 {$smarty.ldelim}{$smarty.rdelim} が使用できます。

度々、Smarty の $left_delimiter$right_delimiter を単純なものに変更すると便利になる事があります。

例 3-6. デリミタを変更する例

<?php

$smarty
= new Smarty;
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->display('example.tpl');

?>

example.tpl の一部 :

<script language="javascript">
var foo = <!--{$foo}-->;
function dosomething() {
    alert("foo is " + foo);
}
dosomething();
</script>