2013-02-06 9 views
17

pierwsze, zacznę z kodem Ja próbuje użyć:Jak mogę warunkowo zastąpić blok układu TWIG?

{% if modal == true %} 
    {% block header %}{% endblock %} 
    {% block footer %}{% endblock %} 
{% endif %} 

Co próbuję wykonać jest nie pokazać moje nagłówka i stopki bloki TYLKO jeśli zmienna nazywa modalna jest prawdą. Ja również mam ten poniżej if:

{% block content %} 
    {{ dump(modal) }} 
{% endblock %} 

Co się dzieje, jest to, że moja przesłanianie do opróżniania bloki nagłówka i stopki zawsze działa niezależnie od tego, czy wartość modalnego jest prawdziwe, czy inaczej. Tak więc uruchamiam to z modalem przekazywanym jako false, w wyniku czego nagłówek i stopka nadal nie są wyświetlane. Wynik polecenia dump dokładnie pokazuje wartość true lub false, ale warunek zawsze wydaje się być prawdziwy w instrukcji if.

Czy bloki nie mogą być zawijane w warunkowej deklaracji lub czy jest coś dodatkowego, co muszę zrobić, aby to działało?

Dzięki za pomoc, jaką możesz zaoferować.

Odpowiedz

21

Bloki nie dbają o jakiejkolwiek logiki wokół niego, jak powiedział w the documentation:

Blok zapewnia sposób zmienić sposób pewna część matrycy jest renderowany, ale to nie przeszkadza w żaden sposób z logiką wokół niego.

Powinieneś umieścić tę logikę wewnątrz bloku, a nie na zewnątrz, jak widać na ostatnim przykładzie w tym artykule.

+0

Dzięki. Właśnie rozmawiałem ze współpracownikiem, który zasugerował to samo. Powiedział, że próbuje renderować blok macierzysty, jeśli modal nie jest prawdą. – slave2zeros

42

Definiowanie

{% block footer %}Some standard content{% endblock %} 

w szablonie rodzica gałązka. Następnie w szablonie, w którym chcesz, aby zdecydować, czy zawartość wyświetlacza stopce można zrobić:

{% block footer %} 
    {% if not modal == true %} 
    {{ parent() }} 
    {% endif %} 
{% endblock %} 

Jeśli modalna jest prawdą - stopka będzie pusta, jeśli nie - w stopce zostaną wydrukowane „Some standardową zawartość”

+5

Chociaż przyjęta odpowiedź jest prawidłowa, ta odpowiedź przyjmuje to podejście i pokazuje, jak faktycznie wdrożyć to rozwiązanie. +1 dla {{parent()}} –

+0

To jest najlepsza odpowiedź, ponieważ wraca do wartości domyślnych – numediaweb

Powiązane problemy