2016-09-08 5 views
0

Я (наконец) переключил свой сайт с Drupal7 на Symfony3.Итерация по ключевым значениям массивов в Twig?

Я работаю над переносом моего макета на .twig.

У меня вопрос о цикле и массивах ключей.

Я настроен к/v массив

{% set test = { 
     sec1: { 
      title: "title 1", 
      content: "content 1" 
     }, 
     sec2: { 
      title: "title 2", 
      content: "content 2" 
     }, 
    } 
%} 

Я могу ссылаться на какой-либо конкретной элемент массива в другой разметки. Например, это работает по назначению

<ul> 
    <li> 
     <h1>{{ test.sec1.title }}</h1> 
     <div> 
      <p>{{ test.sec1.content }}</p> 
     </div> 
    </li> 
</ul> 

Теперь я хочу, чтобы цикл/повторить блок над числом n. Но попробовать это,

<ul> 
{% for i in 1..5 %} 
    <li> 
     <h1>{{ test.sec{{ i }}.title }}</h1> 
     <div> 
      <p>{{ test.sec{{ i }}.content }}</p> 
     </div> 
    </li> 
{% endfor %} 
</ul> 

Запускает ошибка

Unexpected token "punctuation" of value "{" ("end of print statement" expected) in default/index.html.twig at line 67. 
500 Internal Server Error - Twig_Error_Syntax 

Я работал с вариациями этих

http://twig.sensiolabs.org/doc/tags/for.html#iterating-over-keys 

, но не может получить что-нибудь работать еще.

Каков правильный путь для циклирования этого списка через secN в массиве значений ключа?

ответ

1

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

Что вы, вероятно, нужно iterating over a subset:

{% for sec in test|slice(0, 5) %} 
    {{ sec.title }} 
{% endfor %} 

Или, если вы действительно должны иметь доступ к ключевым: iteration over key and value:

{% for key, sec in test %} 
    {{ sec.title }} 
    {{key}} 
{% endfor %} 

Если вам нужно нарезать, продолжая доступ к ключу, вы можете комбинировать последнее с проверка на loop variables:

{% for key, sec in test %} 
    {% if loop.index0 < 5 %} 
     {{ sec.title }} 
     {{key}} 
    {% endif %} 
{% endfor %} 
+0

Это сделал трюк, спасибо! Более интересным было изучение «среза»! Полезно ... – unknown

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