Могу ли я перенести блок веточек с одной страницы на другую?

#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. Большое спасибо за информацию. Я попробую 🙂