2014-09-21 56 views
0

我想弄明白從PrestaShop中的* .tpl文件添加數組元素的方法。PrestaShop:使用smarty添加javascript數組元素

我有什麼是JS變量:

var combinations = []; 

我需要的是將元素添加到這個數組,從* .tpl文件。 我有可用的$組合數組,項目,數組,陣列數組等,與密鑰分配 - 因此imploding沒有意義。

我想是這樣的:

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

由於PS文件比窮人更糟糕,我想這只是猜測天,但也許有人遇到類似的問題...

回答

1

如果我理解你好了,如果在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> 

正如我加入console.log(combinations);登錄到JS控制檯,在控制檯中有

Array [ 1, 2, 3, 20 ] 

所以所有元素被插入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> 

,你會得到:

Array [ "aval", "bval", "c1val", "c2val", "d1val", "d21val", "d22val", "d231", "d232" ] 

EDIT2

如果你需要使用從PHP數據,你在評論解釋你可以使用這個Smarty的模板中的JavaScript來創建多維數組:

{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> 
+0

「我有數組項,數組,數組的可用$組合陣列等等。」所以,讓我們說在PHP中我可以使用: $ smarty-> assign('combinations',array('a'=>'aval','b'=>'bval','c'=> array( 'C1'=> 'c1val', 'C2'=> 'c2val'), 'd'=>數組( 'D1'=> 'd1val', 'D2'=>數組( 'D21'=> 'd21val' ,'d22'=>'d22val','d23'=> array('d231','d232'))))) – 2014-09-21 18:01:12

+0

@KubaStachu JavaScript數組應包含哪些PHP值?請使用這些示例數據和所需的JS數組輸出編輯您的問題。 – 2014-09-21 18:05:16

+0

不幸的是我不需要拼合數組,我需要重複它的JavaScript結構。其實我正在與prestashop模塊中的靜態變量,但他們似乎不工作在PrestaShop ... – 2014-09-21 18:27:38