2016-02-02 41 views
0

我想要一個javascript條件並將其與smarty代碼混合...這可能嗎?Smarty裏面的javascript條件...可能嗎?

例如:

<script> 

if (myjsVar == '2') { 
    {some smarty here} 
} 

</script> 

這就是我想要做的事:

{literal} 
<script type="text/javascript"> 
    myjsVar = '2'; 
    if (myjsVar == '2') { 
    {include file='inc.html'} 
} 
</script> 
{/literal} 

在這個時刻這個代碼不包括什麼?語法?

回答

2

您可以使用literal,使數據塊是從字面上理解。例如Javascript或CSS

{literal}標籤允許從字面上獲取數據塊。這通常用於圍繞Javascript或樣式表塊的 ,其中{curly 大括號}會干擾模板分隔符語法。 {literal} {/ literal}標籤中的任何 都不會被解釋,但會按原樣顯示 。如果您需要嵌入在{literal}塊中的模板標籤,請考慮使用{ldelim} {rdelim}來轉義單個分隔符 。

{literal} 
<script type="text/javascript"> 
if (myjsVar == '2') { 
    {include file='inc.html'} 
} 
</script> 
{/literal} 

您還可以使用{ldelim} and {rdelim}是用於轉義smartys模板定界符

<script type="text/javascript"> 
if (myjsVar == '2') {ldelim} 
    {include file='inc.html'} 
{rdelim} 
</script> 
0

嘗試如下:

{literal} 
    <script type="text/javascript"> 
     var image_src = '{/literal}{$image}{literal}'; 
     alert(image_src); 
    </script> 
{/literal} 

{literal} 
<script language="javascript"> 

function ab() 
{ 

////What you need 

} 
</script> 
{/literal} 

<a href="javascript:ab();">Something you need</a> 
0

如果你想Smarty的變量分配給JavaScript

{literal} 
<script> 

if (myjsVar == '2') { 
    {/literal}{include file='inc.html'}{literal} 
} 

</script> 
{/literal} 
+0

我已經添加了什麼我想 – Satch3000

+0

一些代碼,如果你嘗試:myjsVar =「1 「; if(myjsVar =='2'){....我仍然得到包括 – Satch3000

0

在Smarty的3個模板,{和}括號會因此長期忽略,因爲它們被空白包圍。

你可以使用下面沒有文字擒縱。

<script> 
if (myjsVar == '2') { 
    {some smarty here} 
} 
</script> 

以下代碼需要文字擒縱。

{literal} 
    function bazzy() {alert('foobar!');} 
{/literal} 

還可以任意改變Smarty的分隔符,像這樣:

<?php 

$smarty->left_delimiter = '{{'; 
$smarty->right_delimiter = '}}'; 
1

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

+0

這是我想要做的:{literal} {/文字} – Satch3000

+0

Smarty的不分析'{字面}'塊的內容。您必須在{{}}之前關閉'{literal}'塊並在其後打開一個新塊。像這樣:'{literal} {/ literal}' – axiac

+0

它忽略了條件。如果將myjsVar更改爲其他任何內容,則出於某種原因會得到相同的結果 – Satch3000