Smarty避免解析

2018-10-12 14:33 更新

避免Smarty解析

有時候部分模板中的代碼是不需要或者不希望被Smarty解析的, 比較典型的例子是嵌入在頁面HTML中的Javascript或CSS代碼。 問題通常發(fā)生在這些語言會經(jīng)常使用{ 和 },但{ 和 }也恰好是Smarty的定界符。

Note

避免被解析的一個良好方式,是分離你的Javascript/CSS代碼到單獨的文件中, 然后在HTML中引入它們。而且這樣也有利于瀏覽器進行緩存。 當你需要嵌入Smarty的變量或者函數(shù)到Javascript/CSS中,請參考下面的方式:

Smarty模板中,當{ 和 }定界符兩邊都是空格的時候,將會被自動忽略解析。 此特性可以通過設置Smarty的成員變量 $auto_literal為false來關閉。

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

<script>
   // 下面的定界符兩邊都是空格,所以可以被自動忽略解析
   function foobar {
	alert('foobar!');
   }
   // 下面需要手動忽略解析
   {literal}
	function bazzy {alert('foobar!');}
   {/literal}
</script>
  
 

{literal}..{/literal}可以讓塊中間的內(nèi)容忽略Smarty的解析。 在需要使用定界符的時候,可以通過 {ldelim}{rdelim}標簽,或者 {$smarty.ldelim},{$smarty.rdelim}的變量來使用。

Smarty的默認定界符{ 和 }可以整齊地界定一般內(nèi)容的顯示。 然而你可以通過修改Smarty的$left_delimiter 和 $right_delimiter 的變量值,設置更適合的定界符。

Note

修改定界符會影響到全部模板代碼和解析,請確保在修改前已清除了全部的緩存和編譯文件。

Example 3.9. 改變定界符的例子

<?php

$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';

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

?>

  

模板:

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

  

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號