树枝嵌入和扩展的问题

时间:2014-07-15 08:58:21

标签: symfony twig

是否可以扩展嵌入或包含在子模板中的块

我想在页面模板中扩展块顶部,底部,左侧和右侧,扩展layout.html.twig

vertical_boxes.html.twig代码:

<div class="top_box">
    {% block top %}
        Top box default content
    {% endblock %}
</div>

<div class="bottom_box">
    {% block bottom %}
        Bottom box default content
    {% endblock %}
</div>

horizo​​ntal_boxes.html.twig代码:

<div class="left_box">
    {% block left %}
        Left box default content
    {% endblock %}
</div>

<div class="right_box">
    {% block right %}
        Right box default content
    {% endblock %}
</div>

layout.html.twig的代码:

{% extends "::base.html.twig" %}

{% block content %}

    {% embed page_type ~ "_boxes.html.twig" %}

    {% endembed %}

{% endblock %}

Page1模板page1.twig:

{% extends("::layout.html.twig") %}

{% set page_type= 'vertical' %}

{% block top %}
     Page1 content
{% endblock %}

{% block bottom %}
     Page1 content
{% endblock %}

Page2 template page2.twig:

{% extends("::layout.html.twig") %}

{% set page_type= 'horizontal' %}

{% block left %}
     Page2 content
{% endblock %}

{% block right%}
     Page2 content
{% endblock %}

2 个答案:

答案 0 :(得分:1)

那不行。我要做的是在布局中创建一个应该包含框的块,然后将这些框嵌入page1.twig和page2.twig。

embed标签的工作方式与include完全相同,并且允许扩展嵌入式模板中定义的块。嵌入后得到的内容不包含块。

答案 1 :(得分:0)

首先,您应该将子项中定义的所有块捕获到变量中。

然后将它们传递给嵌入式块。

{# parent.html.twig #}

{% set left_block %}{% block left %}{% endblock %}{% endset %}
{% set right_block %}{% block right %}{% endblock %}{% endset %}
{% set top_block %}{% block top %}{% endblock %}{% endset %}
{% set bottom_block %}{% block bottom %}{% endblock %}{% endset %}

{% embed page_type ~ "_boxes.html.twig" %}
    {% block left %}{{ left_block }}{% endblock %}
    {% block right %}{{ right_block }}{% endblock %}
    {% block top %}{{ top_block }}{% endblock %}
    {% block bottom %}{{ bottom_block }}{% endblock %}
{% endembed %}

[left,right | top,bottom]等块对于[vertical | horizo​​ntal] _box来说是奇数,但它们只是被忽略,因为盒子没有这些块。

希望它有效并且可以帮助