Iterowanie w Twig a odwołanie do elementu

0

Witam,

Czy iterując w szablonie jestem w stanie odwołać się do konkretnego elementu iterowanej tablicy, tj.

$array = ['nav' => [
            'link1' => ['url' => 'url'],
            'zastap',
            'strona' => 12,
            'link2' => ['url' => 'url']
        ]];

Szablon

{% for link in nav %}
    {% if link is iterable %}
        {{link.url}}
    {% else %}
        {{link}}
        {% endif %}
{% endfor %}

Ten przykład działa z tym że jeśli pętla dojdzie do elementu 'zastap' to żeby wyświetlila 3 kropki (...). Próbowałem na wszelkie sposoby się do tego odwołać i nie da rady...

Nie wiem czy dobrze sobie tok myślenia obrałem, chcę szablonowi tylko "dać znać" że w pewnym miejscu pętli przy tym elemencie ma zrobić coś innego niż dla wszystkich. Pewnie inaczej trzeba to zrobić.

0

Wrzuć może nieco więcej kodu - może jak przekazujesz do twiga bo nie bardzo rozumiem co jest nie tak. Spróbowałem zrobić coś takiego:

Po stronie php:

<?php
$nav = [
		'link1' => ['url' => 'url'],
		'zastap',
		'strona' => 12,
		'link2' => ['url' => 'url']
	];
	
echo $twig->render('index.html.twig', array('nav' => $nav));

i po stronie twig:

{% for link in nav %}
    {% if link is iterable %}
        {{link.url}}
    {% else %}
        {{link}}
    {% endif %}
{% endfor %}

Wynik jaki otrzymałem to:
url
zastap
12
url

Czyli wydaje mi się, że taki, jaki powinien być. Coś przeoczyłem?

[Mirek]

0

I właśnie w tyn miejscu gdzie jest w tablicy element zastap to ma sie pojawić cos innego np 3 kropki dla przykladu ale nie tak łatwo to pójdzie bo elementów nieiterowalnych w tablicy bedzie więcej wiec trzeba sie będzie odwołać do tego konkretnego elementu pewnie po nazwie (kluczu?)

0

To działa:

{% for link in nav %}
    {% if link is iterable %}
        {{link.url}}
    {% else %}
        {%  if link == 'zastap'  %}
            ...
        {% else %}
            {{link}}
        {%  endif %}
    {% endif %}
{% endfor %}

ewentualnie (chyba czytelniej):

{% for link in nav %}
    {% if link is iterable %}
        {{link.url}}
    {% elseif link == 'zastap' %}
         ...
    {% else %}
       {{link}}
    {% endif %}
{% endfor %}

Dodatkowe informacje: http://twig.sensiolabs.org/doc/tags/if.html

Tyle, że zaczyna to wyglądać strasznie: warunki w pętli, a wszystko po stronie szablonu twig. Warto przenieść ciężar opracowania danych na kontrolery, bądź klasy, a nie szablony. Szablon powinien zajmować się tylko jak najprostszym wyświetlaniem informacji.

[Mirek]

1 użytkowników online, w tym zalogowanych: 0, gości: 1