templates – 将Twig块传递给嵌入式模板

前端之家收集整理的这篇文章主要介绍了templates – 将Twig块传递给嵌入式模板前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个纤薄的框架应用程序中使用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?

解决方法

你不能做这个.

{%embed%}在技术上定义了一个新的(匿名)模板,它扩展了嵌入式模板(这就是它可以覆盖块的方式)并被包含在当前的模板中.这实际上只是{%include%}和{%extends%}的语法糖,以避免必须将此部分模板存储在自己的文件中并仅包含一次.子模板不能扩展Twig包含.只有当前模板的块可用于扩展.并且event.phtml没有任何块.

猜你在找的CSS相关文章