2016-07-07 2 views
0

У меня есть массив я итерация, чтобы тянуть в различных типах компонентов в моей странице:Передачи переменного Twig из массива в включаемой

array(
    'content'=> array(
     'componentA'=>array(
      'val'=>'1', 
      'title'=>'sample title' 
     ), 
     'componentB' 
    ) 
) 

Я пытающийся передать переменные через из массива включенный шаблон, но я не уверен, как превратить эту строку, создаваемую объединением, в нечто, что include может понять как массив переменных. Когда я исключаю «с» из первых @компонентов, он печатает все значения по умолчанию, которые я установил в итерируемых компонентах, как я ожидал, но все же дает мне белый экран, когда я сохраняю атрибут «in». Когда я показываю сам вар, он возвращает эту строку: (Заметьте, я также пытался ставить кавычки {{к}} но безрезультатно)

{ val:'1',title:'sample title' } 

Как я могу передать переменные из моего массива в моем компонент?

{% for key,item in content %} 
    {% if item is iterable %} 

     {% set var = [] %} 
     {% for k,v in item %} 
      {% set temp %}{% if loop.first %} { {% endif %}{{ k }}:'{{ v }}'{% if loop.last %} } {% endif %}{% endset %} 
      {% set var = var|merge([ temp ]) %} 
     {% endfor %} 
     {% set var = var|join(',') %} 

     {{ include ("@components/" ~ key ~ ".tmpl",var) }} 
    {% else %} 
     {{ include ("@components/" ~ item ~ ".tmpl") }} 
    {% endif %} 
{% endfor %} 

ответ

1

Ваши неверные утверждения включены. Вы используете {{ include ... }}, который должен быть {% include ... %}.

Следующий фрагмент кода должен работать, если вы хотите, чтобы предоставить данные из массива (а не данные цикла):

{% for key,item in content %} 
    {% if item is iterable %} 
     {% include ("@components/" ~ key ~ ".tmpl") with item %} 
    {% else %} 
     {% include ("@components/" ~ item ~ ".tmpl") %} 
    {% endif %} 
{% endfor %} 

Вы можете использовать {{ val }} и {{ title }} в пределах вашего шаблона компонента.

Если вы хотите, чтобы включить данные цикла, вы можете использовать:

{% for key,item in content %} 
    {% if item is iterable %} 
     {% include ("@components/" ~ key ~ ".tmpl") with {item: item, loop: loop} %} 
    {% else %} 
     {% include ("@components/" ~ item ~ ".tmpl") %} 
    {% endif %} 
{% endfor %} 

Вы можете использовать {{ item.val }}, {{ item.title }} и {{ loop.index }} в вашем шаблоне компонента.

+0

Работал как очарование, спасибо! –

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