Intereting Posts
PHP и MySQL: усечение нескольких таблиц Ошибка Javascript в Ubuntu Uncaught ReferenceError: $ не определено У меня ошибка Parse: синтаксическая ошибка, неожиданное ',' Итерации через определенное дерево каталогов и сохранение всех .ttf-файлов в массив в PHP Как остановить скрипт PHP, работающий на фоне Aptana 3.0.4 и отладка PHP Как я могу заставить YAML игнорировать необработанный HTML в том же файле Безопасная связь между JavaScript и веб-службой в PHP Выбор всех полей, кроме только одного поля в mysql Каковы технические отличия между безопасными и безопасными потоковыми пакетами для Windows XP? Как вставить значение переключателя, которое имеет несколько имен радио в codeigniter? Каков правильный способ проверить, включено ли поле бит в php Как создать собственный твидовый тэг, который выполняет обратный вызов? SQL: Показать последние сообщения из БД Как создать вспомогательные массивы на основе префиксов строки?

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

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

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

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

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

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

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

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

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

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

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

определять

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

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

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

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