避免Smarty解析

有时候部分模板中的代码是不需要或者不希望被Smarty解析的,比较典型的例子是嵌入在页面HTML中的Javascript或CSS代码。 问题通常发生在这些语言会经常使用{ 和 },但{ 和 }也恰好是Smarty的定界符

Note

避免被解析的一个良好方式,是分离你的Javascript/CSS代码到单独的文件中, 然后在HTML中引入它们。而且这样也有利于浏览器进行缓存。 当你需要嵌入Smarty的变量或者函数到Javascript/CSS中,请参考下面的方式:

Smarty模板中,当{ 和 }定界符两边都是空格的时候,将会被自动忽略解析。 此特性可以通过设置Smarty的成员变量 $auto_literal为false来关闭。


Example 3.8. 使用自动忽略解析的特性

  1. <script>
  2. // 下面的定界符两边都是空格,所以可以被自动忽略解析
  3. function foobar {
  4. alert('foobar!');
  5. }
  6. // 下面需要手动忽略解析
  7. {literal}
  8. function bazzy {alert('foobar!');}
  9. {/literal}
  10. </script>
  11.  

{literal}..{/literal}可以让块中间的内容忽略Smarty的解析。 在需要使用定界符的时候,可以通过 {ldelim}{rdelim}标签,或者 {$smarty.ldelim},{$smarty.rdelim}的变量来使用。

Smarty的默认定界符{ 和 }可以整齐地界定一般内容的显示。 然而你可以通过修改Smarty的$left_delimiter$right_delimiter 的变量值,设置更适合的定界符。

Note

修改定界符会影响到全部模板代码和解析,请确保在修改前已清除了全部的缓存和编译文件。


Example 3.9. 改变定界符的例子

  1. <?php
  2.  
  3. $smarty->left_delimiter = '<!--{';
  4. $smarty->right_delimiter = '}-->';
  5.  
  6. $smarty->assign('foo', 'bar');
  7. $smarty->assign('name', 'Albert');
  8. $smarty->display('example.tpl');
  9.  
  10. ?>
  11.  

模板:

  1. Welcome <!--{$name}--> to Smarty
  2. <script language="javascript">
  3. var foo = <!--{$foo}-->;
  4. function dosomething() {
  5. alert("foo is " + foo);
  6. }
  7. dosomething();
  8. </script>
  9.  

原文: https://www.smarty.net/docs/zh_CN/language.escaping.tpl