有办法做到这一点吗?我有一个输出一篇博客文章的模板。
现在,在索引页面上,我通过将该模板包含在 for 循环和 show 页面中显示10篇文章,我只显示一篇。< / p>
指数:
{% 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次?
我正在尝试制作我的“片段”模板(用于包含的模板)定义他们使用的样式表,并使它们“注入”到页面中。
答案 0 :(得分:17)
您是否尝试使用use?
不幸的是,我不能完全确定我的问题是否正确,但此处未提及{% 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的新手。所以,如果我的答案完全没用,请你在投票前发表评论并删除它吗? 但是,如果它确实有帮助,并且我的示例中只有一些错误,也请通知我,我会解决它。
答案 1 :(得分: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() }}
,这将打印该块已有的每个内容。