使用Smarty将值从PHP传递到JS


Pass value from PHP to JS with Smarty?

如何将值从php传递到javascript?我和smarty一起工作,我试过这个,但js似乎把它当成了一根绳子。该值设置为20。

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

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

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

然后在js文件中:

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

但是没有选择任何选项,那么即使是第一个或默认值也没有,如果我尝试打印{$settings['fontendEntry']},它也不起作用。它似乎只是被当作一根绳子。

BTW:这是一个很好的方式来通过智能或一般的设置?如果我不使用smarty,我如何传递值?这是正确的吗?如果是在html文件中完成的,这是一个好方法吗?

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

在smarty中,您可以使用:{$myarray|@json_encode}如何使用smarty生成json?

所以它可能是这样的:

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

然后,您可以在类似于普通对象data.entrys;的js中访问它,少了php/js,混合了更清晰的js代码。

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

在Smarty模板文件上定义一个全局JS变量:

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

并在JS文件上使用:

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

您可以使用这种方法,它具有同步HTML和.ini设置的额外优势。

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