跳至内容

转义 Smarty 解析

有时需要或必须让 Smarty 忽略它原本会解析的段落。一个典型的例子是在模板中嵌入 Javascript 或 CSS 代码。问题在于这些语言使用了 { 和 } 字符,这些字符同时也是 Smarty 的默认分隔符

注意

避免转义的好方法是将 Javascript/CSS 分别放到自己的文件中并使用标准 HTML 方法来访问它们。这还能利用浏览器脚本缓存。当需要将 Smarty 变量/函数嵌入到 Javascript/CSS 中时,需要执行以下操作。

在 Smarty 模板中,只要 { 和 } 花括号被空格包围,它们将被忽略。可以通过设置 Smarty 类变量$auto_literal为 false 来禁用此行为。

示例

<script>
   // the following braces are ignored by Smarty
   // since they are surrounded by whitespace
   function foobar {
    alert('foobar!');
   }
   // this one will need literal escapement
   {literal}
    function bazzy {alert('foobar!');}
   {/literal}
</script>

{literal}..{/literal}块用于转义模板逻辑块。还可以使用{ldelim}{rdelim}标记或{$smarty.ldelim}{$smarty.rdelim}变量逐个转义花括号。

Smarty 的默认分隔符 { 和 } 清晰地表示演示内容。然而,如果另一组分隔符更能满足您的需要,则可以使用 Smarty 的 setLeftDelimiter()setRightDelimiter() 方法来更改它们。

注意

更改分隔符会影响所有模板语法和转义。如果您决定更改它们,请务必清除缓存和已编译文件。

<?php

$smarty->setLeftDelimiter('<!--{');
$smarty->setRightDelimiter('}-->');

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

模板所在的位置

Welcome <!--{$name}--> to Smarty
    <script>
  var foo = <!--{$foo}-->;
  function dosomething() {
    alert("foo is " + foo);
  }
  dosomething();
</script>