从PHP传递到Smarty和Javascript的变量
我在php中有一个对象,它被传递给Smarty,比如$Smarty->assign('o',$o) 然后我需要在javascript中访问该对象及其属性 如何做到这一点,而不必在tpl中使用任何javascript。我希望它们都在一个外部文件中从PHP传递到Smarty和Javascript的变量,php,javascript,variables,smarty,Php,Javascript,Variables,Smarty,我在php中有一个对象,它被传递给Smarty,比如$Smarty->assign('o',$o) 然后我需要在javascript中访问该对象及其属性 如何做到这一点,而不必在tpl中使用任何javascript。我希望它们都在一个外部文件中 如果不可能,怎么做?不,不可能。Smarty的assign方法只是将数据从php传递到模板 您可以创建自己的smarty函数,输出必要的js,并将其用作模板中的修饰符: {$o|jsify} var variable={variable}; 要结合z
如果不可能,怎么做?不,不可能。Smarty的
assign
方法只是将数据从php传递到模板
您可以创建自己的smarty函数,输出必要的js,并将其用作模板中的修饰符:
{$o|jsify}
var variable={variable};
要结合zerkms和Didozavar的答案,这里有一个可重用的修饰符函数:
<?php
function jsify($object, $name = 'foo'){
$json_object = json_encode($object);
return "<script type=\"text/javascript\"> var $name = $json_object; </script>";
}
$smarty->register_modifier("jsify", "jsify");
$smarty->assign("foo", $foo);
$smarty->assign("bar", $bar);
?>
{* In Template *}
{$foo|jsify}
{$bar|jsify:bar}
{* Verify *}
<script type="text/javascript">
// assuming you're using a browser that supports console
console.log(foo);
console.log(bar);
</script>
我相信我已经找到了这样的解决方案,..内容不会出现在.tpl中,因此也不会出现在html中
将php变量直接传递到.php中的javascript变量,它将起作用,而不是…内容将出现在.tpl和html中我使用了以下技术,对我来说效果很好 在test.php文件中
$t = new template();
$t->assign("testVar", $testVar);
$t->fetch("test.tpl");
在test.tpl文件中。用grabMe创建一个div
<div id="grabMe">{$testVar}</div>
{literal}
<script language="javascript" type="text/javascript">
var testVar = $("#grabMe").text();
</script>
{/literal}
{$testVar}
{literal}
var testVar=$(“#grabMe”).text();
{/literal}
它工作得很好。我使用了以下技术,它对我很有效 在smarty变量周围使用双引号(在我的情况下不使用单引号)
这就很好了,因为您可以通过smarty以这种方式分配变量+1.这只适用于非常简单的变量,不适用于对象或数组。当
$base\u dir
包含引号时,这可能会失败<代码>var base_dir='{$base_dir | escape:'javascript'}'代码>可能更适合字符串。如果您已解决此问题,请简要说明您的解决方案。
<div id="grabMe">{$testVar}</div>
{literal}
<script language="javascript" type="text/javascript">
var testVar = $("#grabMe").text();
</script>
{/literal}
var base_dir = "{$base_dir}";