SmartyでのJavaScriptやCSS直接記述
SmartyのテンプレートファイルにJavaScriptやCSSを直接記述した場合、SmartyErroreが発生してしまう。
これはSmartyテンプレートでは、処理する記述をデフォルトで{}で囲まれた部分を実行の記述として処理するからだ。
JavaScriptやCSSなども同様で、function宣言やcssのセレクタ以降に記述される宣言ブロックで{}を使用しているので、直接ファイルに記述した場合は、Smartyでの処理が実行されてしまう。
エラーメッセージを見れば、変数宣言やプロパティが対象にエラーが出力されるので一目瞭然だが、
実行環境などをきちんと把握できない場合は、原因追究に戸惑う場合もある。
ましてや、知識がない担当者同士でやりとりをした場合、解決策の見えない伝言ゲームになってしまうこともある。
外部ファイルでの実行であれば全く問題はないが、都合上どうしても直記述をする場合には、
エスケープ専用のタグで囲むことで、Smartyがスキップしてくれる。
リテラル {literal}{/literal}でJavaScriptやCSS記述を囲むことで、Smartyがその間に{}の記述があっても、
Smartyは記述をスキップして処理します。
補足としては、逆にSmartyテンプレート内で{}で囲んだ実行記述内に{}を記述したい場合は、{ldelim}{rdelim}と記述することで、
Smarty出力の際に、{}に置き換えて実行されます。