#php #symfony #twig #twig-filter
Вопрос:
Надеюсь, кто-нибудь сможет дать совет. Я работаю над темой для CMS. У меня есть одна страница на основе веточек в качестве шаблона темы, поэтому очевидно, что все блоки веточек для разных типов страниц находятся в одном документе. CMS имеет два типа страниц, которые можно создавать и просматривать с помощью конструктора страниц. На данный момент все блоки Веточек отображаются на странице A, а также на странице B с конца шрифта. Могу ли я написать какой-нибудь код веточки, который позволит мне отображать блок веточки на странице A, но не на странице B? Я понимаю, что мне нужен какой-то фильтр, но я фильтрую по URL-адресу или есть лучший способ? Ценю любую помощь, которую вы можете мне оказать.
Комментарии:
1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
Чтобы предотвратить отображение блока из расширенного шаблона, вы можете переопределить этот блок
главная.веточка
{% block foo %}
Foo
{% endblock %}
{% block bar %}
Bar
{% endblock %}
ребенок.веточка
{% extends "main.twig" %}
{% block foo %}{% endblock %}
Приведенный выше фрагмент просто отобразится Bar
Чтобы сделать еще один шаг вперед, вы можете переопределить блок и по-прежнему разрешить выполнение исходного блока расширенного шаблона с помощью функции {{ parent() }}
ребенок.веточка
{% extends "main.twig" %}
{% block foo %}
Lorem Ipsum<br />
{{ parent() }}
{% endblock %}
Это выведет
Lorem Ipsum<br />
Foo
Bar
Объяснив это, вы можете обернуть вызов функции parent()
в любое удобное для вас условие, тем самым контролируя, какой блок показывать/скрывать
{% extends "main.twig" %}
{% block foo %}
{% if conditionA == true %}
{{ parent() }}
{% endif %}
{% endblock %}
{% block bar %}
{% if conditionB == true %}
{{ parent() }}
{% endif %}
{% endblock %}
Комментарии:
1. Большое спасибо за информацию. Я попробую 🙂