2015-11-18 2 views
2

Похоже, аргумент не передается должным образом ...Передача массива в включаемой в веточке

{% set items = { 
     item: { 
      'id': '1', 
      'brand': 'client1', 
      'description': 'solutions.client1.description' | trans}, 
     item: { 
      'id': '2', 
      'brand': 'client2', 
      'description': 'solutions.client2.description' | trans} 
    } %} 

    {% include 'site/case-excerpt.html.twig' 
     with {'id': items.item.id, 
       'brand': items.item.brand, 
       'description': items.item.description 
     } 
    %} 

Затем в site/case-excerpt.html.twig файле:

{% include 'site/testimonials/item.html.twig' 
    with {'id': id, 
      'brand': brand, 
      'description': description 
      } 
%} 

И в файле site/testimonials/item.html.twig:

<div class="carousel-item {{ id }}"> 
    <img src="images/brands/{{ brand }}.jpg"> 
    <p> 
     {{ description }} 
    </p> 
</div> 

Ожидаемый результат будет следующим:

<div class="carousel-item 1"> 
    <img src="images/brands/client1.jpg"> 
    <p> 
     I'm the content of the translation for the first client 
    </p> 
</div> 
<div class="carousel-item 2"> 
    <img src="images/brands/client2.jpg"> 
    <p> 
     I'm the content of the translation for the second client 
    </p> 
</div> 

Я отказался от идеи зацикливания ручного желоба items, так как это возможно сделать красиво, here for example.

ответ

0

Вот окончательный рабочий код

Базовый файл. Массив определяется и передается в include.

{% set items = [{ 
      'id': '1', 
      'brand': 'euromaster', 
      'description': 'solutions.euromaster.description' | trans}, 
     { 
      'id': '2', 
      'brand': 'logo-havas-voyages', 
      'description': 'solutions.havas.description' | trans} 
    ] %} 

    {% include 'site/case-excerpt.html.twig' 
     with {'items': items 
     } 
    %} 

Затем в файле site/case-excerpt.html.twig: Мы цикл на массиве и включают в себя частичное

{% for item in items %} 
    {% include 'site/testimonials/item.html.twig' 
     with {'id': item.id, 
       'brand': item.brand, 
       'description': item.description 
       } 
    %} 
{% endfor %} 

И в файле site/testimonials/item.html.twig:

<div class="carousel-item {{ id }}"> 
    <img src="images/brands/{{ brand }}.jpg"> 
    <p> 
     {{ description }} 
    </p> 
</div> 

Благодаря @Mazzy!

2

В приведенном примере они проходят через объекты и включают частичный для каждого объекта.

Вы используете items.item. Twig не имеет понятия, что вы хотите, также, создавая массив с тем же ключом item, не будет работать

{% set items = [{ 
      'id': '1', 
      'brand': 'client1', 
      'description': 'solutions.client1.description' | trans}, 
      { 
      'id': '2', 
      'brand': 'client2', 
      'description': 'solutions.client2.description' | trans} 
    ] %} 

затем петлю через ваши вопросы и включают в себя частичное

{% for item in items %} 
    {% include 'site/case-excerpt.html.twig' 
      with {'id': item.id, 
        'brand': item.brand, 
        'description': item.description 
      } 
{% endfor %} 
+0

Спасибо @Mazzy, я уверен, что это большой шаг вперед, однако я все еще застрял, потому что у меня есть 3 разных файла, а не два. Я хотел бы 1. Базовый файл. Определите массив и передайте его в include в файл 'case-excerpt.html.twig' 2.' case-excerpt.html.twig': цикл через массив, чтобы показать 'item.html.twig' в качестве шаблона 3. 'item.html.twig' отображает содержимое текущего значения массива Это делает вам esnse? – Romainpetit

+0

Получил это. Я собираюсь опубликовать окончательный результат, спасибо! – Romainpetit