繁体   English   中英

树枝包含模板扩展父母的块一次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM