Smarty的版本2是用Javascript代碼中使用大括號相混淆;它試圖將它們解釋爲開放標籤。爲避免此問題,<script>
元素的內容通常被包含在Smarty塊中的{literal}
中。
缺點是,如果需要使用Smarty函數生成JavaScript塊的一個片段,則必須關閉{literal}
塊並再次打開它。
在Smarty的2,它的工作原理是這樣的:
{assign var="text" value="Hello world!"}
<script>
{literal}
if (myjsVar == '2') {
alert('{/literal}
{* Smarty code here *}
{$text|escape:'javascript'}
{*
* End of the Smarty code; start another 'literal' block
* for the rest of the Javascript code
*}
{literal}');
}
{/literal}
</script>
生成的文字是這樣的:
<script>
if (myjsVar == '2') {
alert('Hello world!');
}
</script>
Smarty的3不需要在{literal}
虛線框包含腳本,只要花括號({
和}
)被空白字符包圍。
更新:
另外,如果使用Javascript塊只包含幾個括號和很多Smarty的代碼,你可以忘掉{literal}
塊和使用{ldelim}
和{rdelim}
爲{
和}
。
像這樣:
{assign var="text" value="Hello world!"}
<script>
if (myjsVar == '2') {ldelim}
alert('{$text|escape:'javascript'}');
{include file="inc.html"}
{rdelim}
</script>
它的工作原理相同的兩個版本的Smarty 2和3
我已經添加了什麼我想 – Satch3000
一些代碼,如果你嘗試:myjsVar =「1 「; if(myjsVar =='2'){....我仍然得到包括 – Satch3000