是否可以扩展嵌入或包含在子模板中的块
我想在页面模板中扩展块顶部,底部,左侧和右侧,扩展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>
horizontal_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 %}
答案 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 | horizontal] _box来说是奇数,但它们只是被忽略,因为盒子没有这些块。
希望它有效并且可以帮助