我在一个纤薄的框架应用程序中使用twig模板。我有一个模板page.phtml
,它为一组数据分页,并有几个子块,用于覆盖每个元素细节,如分页用户,事件,订单等。
page.phtml
<div class="page">
{% block block1 %}default content{% endblock %}
<ul>
...
</ul>
{% block block2 %}{% endblock %}
</div>
我有一个event.phtml
模板,其中嵌入了page.phtml
并向页面添加了一些其他内容;它还会覆盖默认页面的block1内容
event.phtml
<html>
<body>
<h1>Event Page</h1>
{% embed "page.phtml" %}
{% block block1 %}event page content{% endblock %}
{% endembed %}
</body>
</html>
我有一个自定义事件页面,只需要修改一些事件页面的块,所以我像这样扩展event.phtml
custom_event.phtml
{% extends "event.phtml" %}
{% block block2 %}overridden value{% endblock %}
并且预期block2的重写内容将显示在父模板嵌入的page.phtml模板中。我可以在父模板中输出block2的值,它就在那里,但在嵌入式模板中却没有。我尝试在嵌入式event.phtml
中明确传递块,如此
{%embed "page.phtml" %}
{% block block2 %}{{parent()}}{% endblock %}
...
{% endembed %}
但这并没有产生任何影响。如何从custom_event.phtml
模板一直通过扩展的event.phtml
模板和嵌入式page.phtml
模板获取被覆盖的block2?
答案 0 :(得分:0)
你不能这样做。
{% embed %}
在技术上定义了一个新的(匿名)模板,它扩展了嵌入式模板(这就是它可以覆盖块的方式)并被包含在当前的模板中。这实际上只是{% include %}
和{% extends %}
的语法糖,以避免将此部分模板存储在自己的文件中并仅包含一次。
子模板不能扩展Twig包含。只有当前模板的块可用于扩展。并且event.phtml
没有任何阻止。