Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从PHP传递到Smarty和Javascript的变量_Php_Javascript_Variables_Smarty - Fatal编程技术网

从PHP传递到Smarty和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

我在php中有一个对象,它被传递给Smarty,比如$Smarty->assign('o',$o) 然后我需要在javascript中访问该对象及其属性

如何做到这一点,而不必在tpl中使用任何javascript。我希望它们都在一个外部文件中


如果不可能,怎么做?

不,不可能。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}";