Как я могу условно переопределить блок макета TWIG?
Сначала позвольте мне начать с кода, который я пытаюсь использовать:
{% if modal == true %}
{% block header %}{% endblock %}
{% block footer %}{% endblock %}
{% endif %}
То, что я пытаюсь выполнить, состоит в том, чтобы не показывать мои блоки верхнего и нижнего колонтитов ТОЛЬКО, если переменная, называемая модальной, является истинной. У меня также есть это ниже выражения if:
{% block content %}
{{ dump(modal) }}
{% endblock %}
Что происходит, так это то, что мое переопределение для освобождения блоков заголовка и нижнего колонтитула всегда выполняется независимо от того, является ли значение модальным истинным или иным. Итак, я запускаю это, когда модально передается как false, и результат заключается в том, что верхний и нижний колонтитулы все еще не отображаются. Результат команды дампа точно показывает true или false, но условие всегда, кажется, оценивает true в выражении if.
Могут ли блокировать не быть завернутыми в условный оператор, или есть что-то дополнительное, что мне нужно сделать, чтобы сделать эту работу?
Спасибо за любую помощь, которую вы можете предложить.
Ответы
Ответ 1
Блоки не заботятся о какой-либо логике вокруг него, как сказано в документации:
Блок предоставляет способ изменить способ отображения определенной части шаблона, но он никак не мешает логике вокруг него.
Вы должны поместить эту логику внутри блока, а не на внешнюю сторону, как вы можете видеть в последнем примере этой статьи.
Ответ 2
Определить
{% block footer %}Some standard content{% endblock %}
в шаблоне материнской ветки.
Затем в шаблоне, где вы хотите решить, может ли отображаться содержимое нижнего колонтитула:
{% block footer %}
{% if not modal == true %}
{{ parent() }}
{% endif %}
{% endblock %}
Если модальное значение true - нижний колонтитул будет пустым, если нет - в нижнем колонтитуле будет напечатан "Некоторый стандартный контент"