变量从 PHP 传递到 Smarty 和 Javascript

发布于 2024-11-15 07:48:47 字数 175 浏览 0 评论 0原文

我在 php 中有一个对象,它像 $smarty->assign('o',$o) 一样传递给 Smarty 然后我需要在 JavaScript 中访问该对象及其属性。

在 tpl 中没有任何 javascript 的情况下,你如何做到这一点?我希望它们全部保存在外部文件中。

如果不可能,该怎么办?

I have an object in php, which is passed to Smarty like $smarty->assign('o',$o)
Then I need to access that object and it's properties in javascript.

How do you do it, without having any javascript in tpl. i want them all in an external file.

If not possible, how to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

孤独患者 2024-11-22 07:48:47

不,这是不可能的。 Smarty 的 assign 方法只是将数据从 php 传递到模板。

您可以创建自己的 smarty 函数来输出必要的 js 并将其用作模板中的修饰符:

{$o|jsify}

Nope, it is not possible. Smarty's assign method just passes data from php to templates.

You could create your own smarty function that would output necessary js and use it as modifier in your templates:

{$o|jsify}
一个人的旅程 2024-11-22 07:48:47

为了结合 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>

编辑:
考虑到这一点后,用自定义函数镜像模板函数 {assign} 可能会更一致。

<?php

function assign_to_javascript($params, $template){
    // validate params values
    $name = $params['var'];
    $json_object = json_encode($params['value']);
    echo "<script type=\"text/javascript\"> var $name = $json_object; </script>";
}

$smarty->register_function("assign_to_javascript", "assign_to_javascript");

$smarty->assign("foo", $foo);
$smarty->assign("bar", $bar);

?>

{* In Template *}
{assign_to_javascript var="foo" value=$foo}
{assign_to_javascript var="bar" value=$bar}

{* Verify *}
<script type="text/javascript">
    // assuming you're using a browser that supports console
    console.log(foo);
    console.log(bar);
</script>

To combine zerkms's and Didozavar's answers, here's a reusable modifier function:

<?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>

Edit:
After thinking about this, it might be more consistent to make it mirror the template function {assign} with a custom function.

<?php

function assign_to_javascript($params, $template){
    // validate params values
    $name = $params['var'];
    $json_object = json_encode($params['value']);
    echo "<script type=\"text/javascript\"> var $name = $json_object; </script>";
}

$smarty->register_function("assign_to_javascript", "assign_to_javascript");

$smarty->assign("foo", $foo);
$smarty->assign("bar", $bar);

?>

{* In Template *}
{assign_to_javascript var="foo" value=$foo}
{assign_to_javascript var="bar" value=$bar}

{* Verify *}
<script type="text/javascript">
    // assuming you're using a browser that supports console
    console.log(foo);
    console.log(bar);
</script>
倥絔 2024-11-22 07:48:47

<脚本类型=“text/javascript”>
var 变量 = {变量};

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

诗化ㄋ丶相逢 2024-11-22 07:48:47

我使用了以下技术,它对我有用
在 smarty 变量周围使用双引号(单引号在我的情况下不起作用)

var base_dir = "{$base_dir}";

I used the following technique and it works for me
use double quote arround smarty variable(single quote is not worked in my case)

var base_dir = "{$base_dir}";
独行侠 2024-11-22 07:48:47

我相信我已经找到了解决方案,使得 ..content 不会出现在 .tpl 中,因此 html

将 php 变量直接在 .php 中传递给 javascript 变量,它将起作用,而不是 ...content 将出现在.tpl 和 html

I believe I have found the solution such that ..content won't appear in the .tpl and hence html

pass the php variable to javascript variable directly in the .php , it will work, and not ...content will appear in the .tpl and html

眼泪都笑了 2024-11-22 07:48:47

我使用了以下技术,它对我来说非常有效。

在 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}

效果很好。

I used following technique and it worked for me pretty well.

In test.php file.

 $t = new template();
 $t->assign("testVar", $testVar);
 $t->fetch("test.tpl");

In test.tpl file. create a div with grabMe.

    <div id="grabMe">{$testVar}</div>

    {literal}
        <script language="javascript" type="text/javascript">
              var testVar = $("#grabMe").text();
        </script>    
    {/literal}

It works fine.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文