2016-09-08 1 views
0

Je passe (enfin) mon site de Drupal7 à Symfony3. Je travaille sur la migration de ma mise en page vers .twig.L'itération des tableaux de valeurs-clés dans Twig?

J'ai une question sur les boucles et les tableaux de valeurs-clés.

j'ai configuré une matrice k/v

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

I peut faire référence à un quelconque élément de réseau spécifique en un autre balisage. Par exemple, cela fonctionne comme prévu

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

Maintenant je veux boucler/répéter le bloc sur un nombre de n. Mais essayer cela,

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

incendies une erreur

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 

Je travaille avec des variations de ces

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

mais ne peut pas obtenir quoi que ce soit pour travailler encore.

Quelle est la bonne façon de boucler cette liste sur les secN dans le tableau de valeur-clé?

Répondre

1

La raison pour laquelle votre script ne fonctionne pas est que vous ne pouvez pas composer un accesseur de propriété d'objet comme ceci.

Ce que vous avez probablement besoin est iterating over a subset:

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

Ou, si vous avez besoin en effet l'accès à la clé: iteration over key and value:

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

Si vous avez besoin pour trancher tout en accédant à la touche, vous pouvez combiner ce dernier avec un chèque à l'loop variables:

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

qui a fait l'affaire, merci! Plus intéressant était d'apprendre à propos de «tranche»! Utile ... – unknown