2011-05-28 150 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