我有这种模板文件结构:
{# layout.html #}
<!DOCTYPE HTML>
<html lang="pt-br">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" charset="UTF-8">
<title>Twig Project</title>
</head>
<body>
<div id="content">
{% block body %} {% endblock body %}
</div>
<div id="footer">
{% block footer %} {% endblock footer %}
</div>
</body>
</html>
----------
{# specialpage.html #}
Especial content
{% block footer %} THIS IS A SPECIAL FOOTER {% endblock footer %}
----------
{# page1.html #}
{% extends "layout.html" %}
{% include 'specialpage.html' %}
问题:当我包含“specialpage.html”时,“块页脚”与消息“这是一个特殊的脚”不显示。为什么呢?
答案 0 :(得分:1)
我一直在努力解决同样的问题。我希望Twig的include标签首先插入包含的模板的内容,然后解析整个内容,当从包含的页面(特殊页面)引用这些内容时,有效地替换扩展页面(布局)中的块。
但相反,我开始相信include标记首先解析包含的模板,并在解析父页面之前插入包含的模板的解析内容。
文档说include标记包含继承父作用域的模板。但似乎这只适用于变量,而不适用于已定义的块。我假设你不能从包含的模板中覆盖父页面或父布局中的块。
我认为我的解决方案在于重写我的布局模板,以便尽可能多地使用&#39; extends&#39;尽可能标记,因为这个标记似乎对启用所需的继承结构至关重要。
虽然我会重写我的模板,并且假设你也应该这样做,我有一点点希望我们做错了,并且有人会采用正确的方式来做到这一点。