使用Smarty将值从PHP传递给JS?

时间:2015-03-30 11:50:30

标签: javascript php jquery smarty

如何将值从php传递给javascript?我正在使用smarty,我试过这个,但js似乎把它当作一个字符串。该值设置为20.

$smarty->assign('settings', $settings); //$settings is an array

$ settings来自文件,基本上是一些设置。 我想在带有该值的html doc中选择一个选项,但它不起作用。

<select id="entrys">
    <option>5</option>
    <option>10</option>
    <option>20</option>
</select>

然后在js文件中:

$(document).ready(function()
{
    $('#entrys').val("{$settings['frontendEntrys']}");
});

但是没有选择任何选项,甚至没有第一个或默认值,如果我尝试打印{$ settings ['frontendEntrys']},它也无效。它似乎只是一个字符串。

顺便说一句:这是通过smarty或一般传递一些设置的好方法吗?如果我不使用smarty,我该如何传递值?这是正确的吗?这是一个好方法,如果它是在一个html文件中完成的吗?

<script>
    var data = <?php echo $settings['entrys']; ?>
</script>

3 个答案:

答案 0 :(得分:3)

在smarty中你可以使用:{$myarray|@json_encode} Howto generate json with smarty?

所以它可能是这样的:

<script>
    var data = {$settings|@json_encode}
</script>

然后你可以在js中访问它,比如普通对象data.entrys;更少php / js mishmash更清晰的js代码。

$('#entrys').val(data.entrys);

答案 1 :(得分:1)

在Smarty模板文件中定义全局JS变量:

<script>
_Entrys = {$settings['frontendEntrys']};
</script>

并使用JS文件:

$(document).ready(function()
{
    $('#entrys').val(_Entrys);
});

答案 2 :(得分:1)

您可以使用此方法,它具有同步HTML和.ini设置的附加优势。

<select id="entrys">
{foreach $settings as $setting}
    <option {if $setting == 'frontendEntrys'}selected{/if}>{$setting}</option>
{/foreach}
</select>