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

Twig включал шаблон, расширяющий родительский блок один раз

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

Теперь, на странице index, я показываю 10 статей, включая этот шаблон в цикле для и на странице показать. Я показываю только один.

индекс:

{% block stylesheets %}
    {# some stylesheets here #}
{% endblock %}

{% for article in articles %}
        {% include VendorBundle:article.html.twig with { 'article': article } %}
{% endfor %}

показать:

{% block stylesheets %}
      {# some stylesheets here #}
{% endblock %}

{% include VendorBundle:article.html.twig with { 'article': article } %}

Теперь есть способ сделать article.html.twig добавить что-то в {% block stylesheets %} шаблонов, которые включали его автоматически? Если это возможно, как я могу предотвратить добавление этого 10 раз при использовании цикла for?

Я пытаюсь создать свои "фрагментные" шаблоны (шаблоны, используемые для включения), определить таблицы стилей, которые они используют, и заставить их "вставлять" их на страницу.

4b9b3361

Ответ 1

Вы пытались использовать использовать? К сожалению, я не совсем уверен, правильно ли получил вопрос, но {% use %} здесь не упоминался.

Как я понимаю, у вас есть ваш article.html.twig и включить его, например. index.html.twig. Теперь вы хотите добавить что-то из article.html.twig в index.html.twig? А именно в блок {% stylesheets %}.

Если бы я получил способ использования {% use %}, вы могли бы попробовать его вот так.

article.html.twig

{% block stylesheets %}
    <link rel="stylesheet" href="{{ asset('bundles/mybundle/css/article.css') }}" type="text/css" />
{% endblock %}
{% block article %}
    {# whatever you do here #}
{% endblock %}

index.html.twig

{% use "VendorBundle:article.html.twig" with stylesheets as article_styles %}
{% block stylesheets %}
    {{ block('article_styles') }}
    {# other styles here #}
{% endblock %}
{% for article in articles %}
        {% include VendorBundle:article.html.twig with { 'article': article } %}
{% endfor %}

У меня нет возможности проверить его, но в документе говорится несколько очень интересных вещей, и похоже, что это может быть способ сделать это.

Горизонтальное повторное использование - это расширенная функция Twig, которая вряд ли когда-либо понадобится в обычных шаблонах. Он в основном используется проектами, которые требуют, чтобы блоки шаблонов были повторно использованы без использования наследования.

Я новичок в stackoverflow. Поэтому, пожалуйста, если мой ответ абсолютно бесполезен, вы можете просто оставить комментарий перед голосованием, и я удалю его? Однако, если это помогает, и в моем примере есть только некоторые ошибки, также сообщите мне, и я исправлю это.

Ответ 2

Вы можете использовать новый блок (не тестировался):

{# index.html.twig #}
{% block stylesheets -%}
    {% block article_styles '' %}
{%- endblock %}

{% for ... -%}
    {% include VendorBundle:template.html.twig with {'article': article} %}
{%- endfor %}

{# template.html.twig #}
{% block article_styles -%}
    {{ parent() }}
    <link rel=stylesheet href=...>
{%- endblock %}

{# ... #}

Изменить: Добавлено {{ parent() }}, это будет печатать каждое содержимое, которое уже имеет блок.