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

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

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

индекс:

{% 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 раз при использовании цикла?

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

Вы пытались использовать использование ? К сожалению, я не совсем уверен, правильно ли получил вопрос, но {% 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. Поэтому, пожалуйста, если мой ответ абсолютно бесполезен, вы можете просто оставить комментарий перед голосованием, и я удалю его? Однако, если это помогает, и в моем примере есть только некоторые ошибки, также сообщите мне, и я исправлю это.

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

 {# 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() }} , это будет печатать каждый контент, который уже имеет блок.