Variable from PHP to Smarty and Javascript

I have an object in php that is passed to Smarty, for example $ smarty-> assign ('o', $ o) Then I need to access this object and its properties in javascript.

How do you do this without javascript in tpl. I want all of them to be in an external file.

If this is not possible, how to do it?

+3
source share
6 answers

To combine zerkms and Didozavar answers, here is the modifier reuse 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: Thinking about it, it might be more consistent to make it mirror the template function {assign}with the user-defined 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>
+2
source

, . Smarty assign php .

smarty, js :

{$o|jsify}
+1

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

+1

, arround smarty variable ( )

var base_dir = "{$base_dir}";
+1

, , ..content .tpl , , html

php javascript .php, , ... .tpl html

0

, .

test.php.

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

test.tpl. div grabMe.

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

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

.

0

All Articles