2011-05-28 96 views
3

我的php從DB生成一些類型,並將其傳遞給Smarty變量$ X。在jQuery函數中使用smarty變量

在Jquery的幫助下,我希望能夠點擊一個按鈕,我的一個div的內容將被替換爲$ X。

$(document).ready(function(){ 
    $("button").click(function(){ 
    $("#div1").html($X); 
    }); 
}); 

這段Jquery腳本包含在外部js文件中。

回答

4

如果你有一個可以輸出PHP-> Smarty分配變量的模板文件,你可以做的就是在模板中創建一個全局JS變量,然後在你的JS中使用這個全局變量。

如:

模板文件

<script type="text/javascript"> 
var MyGlobalVar = "{$MyGlobalVar}"; 
</script> 

Global.js文件

$(document).ready(function(){ 
    $("button").click(function(){ 
     if (MyGlobalVar != '') { 
      $("#div1").html(MyGlobalVar); 
     } else { 
      alert('Error! Error! Abort!'); 
     } 
    }); 
}); 

注意,你可以輸出Global.js它被解析的文件Smarty(儘管...這可能不是一個好主意),並以這種方式注入你的PHP-> Smarty變量。這會將Global.js包含的文件視爲Smarty模板。

要這樣做,您需要使用{literal},可能需要使用.php文件命名文件(因此它是PHP可解析的),並添加一個PHP header()調用,以便PHP將文件內容輸出到瀏覽器一個Javascript內容類型。

Global.js

<?php 

header("content-type: text/javascript"); 

?> 
var MyGlobalVar = "{$MyGlobalVar}"; 
{literal} 
$(document).ready(function(){ 
    $("button").click(function(){ 
     if (MyGlobalVar != '') { 
      $("#div1").html(MyGlobalVar); 
     } else { 
      alert('Error! Error! Abort!'); 
     } 
    }); 
}); 
{/literal} 

此外,在PHP端,你可能要考慮添加斜線到您的變量,尤其是如果JS變量包含HTML或將使用文本的其他位單/雙引號。

+0

這就像一個魅力! 非常令人印象深刻。 所以我的理解是,如果你想在JS中使用smarty變量,那麼當tpl被解析時,你必須將它傳遞給TPL頁面上的JS變量。 我正在探索將它作爲參數傳遞,'因爲我不喜歡全局變量 – 2011-05-29 07:49:42

+0

是的,一個Smarty變量本質上與PHP變量沒有什麼不同(例如,Smarty編譯爲PHP)。您所需要的只是某個頁面由您的Smarty解析器解析。此外,如果這回答您的問題,請點擊問題旁邊的空白箭頭和投票計數下方的接受答案。 :) – 2011-05-29 13:37:26