我有以下树枝模板:
{# 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(),但是如何使用祖父母呢?
答案 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 %}
这可能有助于某人。
如果有人得到另一种解决方案,请随时回答。