PrestaShop:使用smarty添加javascript数组元素

PrestaShop:使用smarty添加javascript数组元素,javascript,arrays,smarty,element,prestashop,Javascript,Arrays,Smarty,Element,Prestashop,我正试图找出在PrestaShop中从*.tpl文件添加数组元素的方法 我拥有的是js变量: var combinations = []; 我需要的是从*.tpl文件向这个数组添加元素。 我有可用的$combines项目数组、数组、数组数组等,并分配了键-所以内爆没有意义 我正在尝试类似于: {addJsDef combinations[]=$combinations} but it of course won't work. 由于PS文档比穷人更糟糕,我想这只是猜测的一天,但可能有人遇到过

我正试图找出在PrestaShop中从*.tpl文件添加数组元素的方法

我拥有的是js变量:

var combinations = [];
我需要的是从*.tpl文件向这个数组添加元素。
我有可用的$combines项目数组、数组、数组数组等,并分配了键-所以内爆没有意义

我正在尝试类似于:

{addJsDef combinations[]=$combinations} but it of course won't work.

由于PS文档比穷人更糟糕,我想这只是猜测的一天,但可能有人遇到过类似的问题…

如果我理解您的意思,如果在PHP中您将如下内容分配给Smarty元素:

$smarty->assign('combinations', array (1,2,3,20));
您可以在Smarty中使用:

<script>
    var combinations = [];
    {foreach $combinations as $item}
    combinations.push({$item})
    {/foreach}
    console.log(combinations);
</script>
所以所有元素都被插入到JavaScript数组中

如果您有更复杂的PHP数组:

$smarty->assign('combinations', array(
        'a' => 'aval',
        'b' => 'bval',
        'c' => array('c1' => 'c1val', 'c2' => 'c2val'),
        'd' => array(
            'd1' => 'd1val',
            'd2' => array(
                'd2‌​1' => 'd21val',
                'd22'   => 'd22val',
                'd23'   => array('d231', 'd232')
            )
        )
    ));
您需要创建平面JavaScript数组,可以使用:

{function jsadd}
    {foreach $data as $item}
        {if not $item|@is_array}
            combinations.push('{$item}')
        {else}
            {jsadd data = $item}
        {/if}
    {/foreach}
{/function}

<script>
    var combinations = [];
    {jsadd data=$combinations}
    console.log(combinations);
</script>
EDIT2

如果您需要使用PHP中的数据在JavaScript中创建多维数组,如您在注释中所述,您可以使用以下Smarty模板:

{function jsadd keypart=''}
    {foreach $data as $key => $item}
        {if not $item|@is_array}
            {if $keypart eq ''}
                combinations['{$key}'] = '{$item}'
             {else}
                combinations{$keypart}['{$key}'] = '{$item}'
            {/if}
        {else}
            combinations{$keypart}['{$key}'] = [];
            {jsadd data = $item keypart = "`$keypart`['`$key`']" }
        {/if}
    {/foreach}
{/function}

<script>
    var combinations = [];
    {jsadd data=$combinations}
    console.log(combinations['a']);
</script>
{function jsadd keypart='''}
{foreach$data as$key=>$item}
{如果不是$item |@is_数组}
{如果$keypart eq'}
组合['{$key}']='{$item}'
{else}
组合{$keypart}['{$key}']='{$item}'
{/if}
{else}
组合{$keypart}['{$key}']=[];
{jsadd data=$item keypart=“`$keypart`['`$key`]]”
{/if}
{/foreach}
{/函数}
var组合=[];
{jsadd data=$combines}
console.log(组合['a']);

“我有可用的$combines数组、数组、数组数组等。”因此,假设在PHP中我可以使用:$smarty->assign('combines',数组('a'=>'aval','b'=>'bval','c'=>array('c1'=>c1val','c2'=>c2val','d23'=>array('d231','d232'))@KubaStachu和JavaScript数组应该包含哪些PHP值?请使用这些示例数据和所需的JS数组输出编辑您的问题。不幸的是,我不需要展平数组,我需要为javascript复制它的结构。实际上,我正在与prestashop模块中的静态变量作斗争,但它们似乎在prestashop中不起作用……好吧,我用静态变量解决了这个问题,结果是php的array_merge()出现了问题,我将在几天后发布解决方案,当我让整个模块正常工作时。@KubaStachu我已经添加了如何根据您的要求从PHP数据中用Javascript创建多维数组的解决方案。我认为您不应该将解决方案放在这里,因为您问的是如何从Smarty中的PHP数据创建JavaScript数组,而不是如何使用其他方法。
Array [ "aval", "bval", "c1val", "c2val", "d1val", "d21val", "d22val", "d231", "d232" ]
{function jsadd keypart=''}
    {foreach $data as $key => $item}
        {if not $item|@is_array}
            {if $keypart eq ''}
                combinations['{$key}'] = '{$item}'
             {else}
                combinations{$keypart}['{$key}'] = '{$item}'
            {/if}
        {else}
            combinations{$keypart}['{$key}'] = [];
            {jsadd data = $item keypart = "`$keypart`['`$key`']" }
        {/if}
    {/foreach}
{/function}

<script>
    var combinations = [];
    {jsadd data=$combinations}
    console.log(combinations['a']);
</script>