如果你有一个可以输出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或将使用文本的其他位单/双引号。
这就像一个魅力! 非常令人印象深刻。 所以我的理解是,如果你想在JS中使用smarty变量,那么当tpl被解析时,你必须将它传递给TPL页面上的JS变量。 我正在探索将它作为参数传递,'因为我不喜欢全局变量 – 2011-05-29 07:49:42
是的,一个Smarty变量本质上与PHP变量没有什么不同(例如,Smarty编译为PHP)。您所需要的只是某个页面由您的Smarty解析器解析。此外,如果这回答您的问题,请点击问题旁边的空白箭头和投票计数下方的接受答案。 :) – 2011-05-29 13:37:26