[英]Twig included template extending parent's block once
有没有办法做到这一点? 我有一个输出一篇博客文章的模板。
现在,在索引页面上,我通过在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次?
我正在尝试使我的“片段”模板(用于包含的模板)定义它们使用的样式表,并使它们“注入”到页面中。
您尝试使用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比较陌生。 因此,如果我的回答完全没有用,请您在拒绝投票之前发表评论,然后将其删除吗? 但是,如果确实有帮助,并且我的示例中仅存在一些错误,也请通知我,我将对其进行修复。
您可以使用一个新的块(未测试):
{# 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() }}
,这将打印该块已有的所有内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.