Twig 使用祖父母区块

Twig 使用祖父母区块,twig,Twig,我有以下细枝模板: {# layout.twig #} {% block content %} THIS IS LAYOUT {% endblock %} 我可以在mypage.twig的内容块内调用parent(),但是如何使用祖父母呢?好的,通过编写问题,我得到了一个解决方案,只需修改辅助布局即可 {# secondary_layout.twig #} {% extends layout.twig %} {% block content %} {% if use_l

我有以下细枝模板:

{# layout.twig #}

{% block content %}
    THIS IS LAYOUT
{% endblock %}



我可以在mypage.twig的内容块内调用parent(),但是如何使用祖父母呢?

好的,通过编写问题,我得到了一个解决方案,只需修改辅助布局即可

{# secondary_layout.twig #}

{% extends layout.twig %}
{% block content %}
    {% if use_layout_block %}
        {{ parent() }}
    {% else %}
        THIS IS SECONDARY_LAYOUT
    {% endif %}
{% endblock %}

它可能会帮助某人


如果有人找到了另一个解决方案,请随意回答。

在某些情况下,您可以实现这一点。不幸的是,你的情况并非如此。但是,如果只使用“水平重用”(关键字),而不使用继承(
extends
),则它可以工作。例如,这适用于表单主题

在我的例子中,我定义了一个表单主题,它继承自bootstrap3表单主题。引导主题本身继承自“form_div_layout”。我想覆盖choice小部件并包含grand parent的(form_div_layout)块内容,因为该块的引导版本在这种情况下不适合我。所以,基本上是一个非常相似的问题

这可以通过继承父级(bootstrap_3_布局)和父级总布局(form_div_布局)来解决,同时声明要覆盖的父级总块的别名:

{# my_form_theme.html.twig #}

{% use 'form_div_layout.html.twig' with choice_widget_collapsed as base_choice_widget_collapsed %}
{% use 'bootstrap_3_layout.html.twig' %}

{% block choice_widget_collapsed -%}
    {# There is no "grandparent()" function, so instead we can do this:  #}
    {{- block('base_choice_widget_collapsed') -}}
{%- endblock %}

我正在写这个答案,虽然它没有回答实际的问题。但其他人在谷歌搜索这样一个“祖父母”功能时可能也会发现这个问题,也许他们会不必要地放弃,当他们读到这里不可能时。

我甚至猜测这是唯一一种实现iTunes功能的方法。如果中间的小树枝是您正在扩展的捆绑文件,并且不想直接编辑它,那么这没有帮助。@caponica这也正是我的问题。但是Med的解决方案给了我一个好主意。我通过在块中添加use语句解决了这个问题。在{#mypage.twig}{%block content%}内添加{%“layout.twig”%}
{# secondary_layout.twig #}

{% extends layout.twig %}
{% block content %}
    {% if use_layout_block %}
        {{ parent() }}
    {% else %}
        THIS IS SECONDARY_LAYOUT
    {% endif %}
{% endblock %}
{# mypage.twig #}
{% extends secondary_layout.twig %}

{% block content %}
    {% set use_layout_block = true %}
{% endblock %}
{# my_form_theme.html.twig #}

{% use 'form_div_layout.html.twig' with choice_widget_collapsed as base_choice_widget_collapsed %}
{% use 'bootstrap_3_layout.html.twig' %}

{% block choice_widget_collapsed -%}
    {# There is no "grandparent()" function, so instead we can do this:  #}
    {{- block('base_choice_widget_collapsed') -}}
{%- endblock %}