使用祖父母块

时间:2016-04-25 12:43:50

标签: twig

我有以下树枝模板:

{# layout.twig #}

{% block content %}
    THIS IS LAYOUT
{% endblock %}
{# secondary_layout.twig #}

{% extends layout.twig %}
{% block content %}
    THIS IS SECONDARY_LAYOUT
{% endblock %}
{# mypage.twig #}
{% extends secondary_layout.twig %}

{% block content %}
    {# I WOULD LIKE TO USE layout content block  here #}
{% endblock %}

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

2 个答案:

答案 0 :(得分:4)

在某些情况下,您可以实现这一目标。不幸的是,不是你的情况。但是,如果仅使用“水平重用”(use关键字),则可以使用它,但不能使用继承(extends)。例如,这适用于表单主题。

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

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

{# 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 %}

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

答案 1 :(得分:2)

通过写问题我得到了一个解决方案,只需修改secondary_layout

{# 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 %}

这可能有助于某人。

如果有人得到另一种解决方案,请随时回答。