Есть ли способ сделать это? У меня есть шаблон, который выводит одну статью в блоге.
Теперь, на индексной странице, я показываю 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() }}
, это будет печатать каждый контент, который уже имеет блок.