14

有没有办法做到这一点?我有一个输出一篇博客文章的模板。

现在,在索引页面上,我通过在for循环中包含该模板来显示 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 %}自动包含它的模板?如果可能的话,如何防止它在使用for循环时添加 10 次?

我正在尝试让我的“片段”模板(用于包含的模板)定义他们使用的样式表并使它们“注入”到页面中。

4

2 回答 2

18

您是否尝试使用use?不幸的是,我不完全确定我的问题是否正确,但{% use %}这里没有提到。

据我了解,您提出的问题article.html.twig并将其包含在 eg 中index.html.twig。现在你想从article.html.twiginto中添加一些东西index.html.twig?即到{% stylesheets %}块。

如果我知道如何使用{% use %}你可以试试这样。

文章.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相当陌生。所以,如果我的回答完全没用,你可以在投票前发表评论然后我删除它吗?但是,如果它确实有帮助并且我的示例中只有一些错误,请通知我,我会修复它。

于 2013-05-04T19:38:05.087 回答
0

您可以使用新块(未测试):

{# 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() }},这将打印块已有的所有内容。

于 2013-01-01T13:38:40.523 回答