Подтвердить что ты не робот

Как я могу условно переопределить блок макета TWIG?

Сначала позвольте мне начать с кода, который я пытаюсь использовать:

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

То, что я пытаюсь выполнить, состоит в том, чтобы не показывать мои блоки верхнего и нижнего колонтитов ТОЛЬКО, если переменная, называемая модальной, является истинной. У меня также есть это ниже выражения if:

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

Что происходит, так это то, что мое переопределение для освобождения блоков заголовка и нижнего колонтитула всегда выполняется независимо от того, является ли значение модальным истинным или иным. Итак, я запускаю это, когда модально передается как false, и результат заключается в том, что верхний и нижний колонтитулы все еще не отображаются. Результат команды дампа точно показывает true или false, но условие всегда, кажется, оценивает true в выражении if.

Могут ли блокировать не быть завернутыми в условный оператор, или есть что-то дополнительное, что мне нужно сделать, чтобы сделать эту работу?

Спасибо за любую помощь, которую вы можете предложить.

4b9b3361

Ответ 1

Блоки не заботятся о какой-либо логике вокруг него, как сказано в документации:

Блок предоставляет способ изменить способ отображения определенной части шаблона, но он никак не мешает логике вокруг него.

Вы должны поместить эту логику внутри блока, а не на внешнюю сторону, как вы можете видеть в последнем примере этой статьи.

Ответ 2

Определить

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

в шаблоне материнской ветки. Затем в шаблоне, где вы хотите решить, может ли отображаться содержимое нижнего колонтитула:

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

Если модальное значение true - нижний колонтитул будет пустым, если нет - в нижнем колонтитуле будет напечатан "Некоторый стандартный контент"