2014-09-21 6 views
0

Я пытаюсь выяснить способ добавления элементов массива из * .tpl файлов в PrestaShop.PrestaShop: добавить элементы массива javascript, используя smarty

Что у меня есть JS переменной:

var combinations = []; 

Что мне нужно, чтобы добавить элементы в массив, из * .tpl файла. У меня есть набор комбинаций $ сочетаний элементов, массивов, массивов массивов и т. Д. С назначенными ключами - поэтому развязка не имеет смысла.

Я пытаюсь что-то вроде:

{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

И если вам нужно создать многомерный массив в JavaScript с использованием данных из PHP, как вы объяснили в комментарии вы можете использовать этот шаблон 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> 
+0

«У меня есть доступный $ комбинации массив элементы, массивы, массивы массивов и т.д." Итак, скажем в PHP, я могу использовать: $ smarty-> assign ('combination', array ('a' => 'aval', 'b' => 'bval', 'c' => array ('с1' => 'c1val', 'с2' => 'c2val'), 'd' => массив ('d1' => 'd1val', 'd2' => массив ('D21' => 'd21val' , 'd22' => 'd22val', 'd23' => array ('d231', 'd232'))))) –

+0

@KubaStachu И что должен содержать массив JavaScript для этих значений PHP? Пожалуйста, отредактируйте свой вопрос с этими данными образца и желаемым массивом JS-массива. –

+0

К сожалению, мне не нужно сгладить массив, мне нужно продублировать его структуру для javascript. На самом деле я борюсь со статическими переменными в модуле prestashop, но они просто не работают в PrestaShop ... –

Смежные вопросы