修改另一个块内的Twig块

时间:2017-08-06 09:14:10

标签: php twig

layout.twig

constructor

page.twig

<main class="main">
    {% block content %}{% endblock content %}
</main>

{% block footer %}{% endblock %}

当我这样做的时候。页脚块呈现两次。一旦内容阻止,一旦它应该是

注意:我简化了模板以使其更具可读性。我看到的问题是我不能在另一个块内使用块。如果我使用它渲染两次。

我必须在块内容中使用页脚。我不想在每个页面中包含扩展和内容。因为它是一样的。我使用下面的东西。

{% extends 'layout.twig' %}
{% block content %}
{#abc#}
    {% block footer %}
        {#123#}
    {% endblock footer %}
{% endblock content %}

1 个答案:

答案 0 :(得分:1)

我认为这是因为你正在嵌套一个先前定义的块,在覆盖其中时阻止另一个先前定义的块。块通常用于定义输出元素的位置,因此将内容放置在内容中是错误的,where it should be实际上意味着在内容块之后,您在layout.twig中定义了内容,这就是根据您的模板文件正确的位置。如果你需要覆盖页脚,你应该在page.twig中的内容块之外执行此操作,如下所示:

{% extends 'layout.twig' %}

{% block footer %}
    {#123#}
{% endblock footer %}

{% block content %}
    {#abc#}
{% endblock content %}

请注意,page.twig中被覆盖的广告块的顺序并不重要,因为您已在layout.twig中做出相关决定。

查看您的示例,我认为您希望将footer放在<main></main>内而不是content块中。如果是这样,您可能需要修改layout.twig。一些变化如下:

layout.twig

<main class="main">
    {% block content %}{% endblock content %}

    {% block footer %}{% endblock footer %}
</main>

当您想要设计页面布局和元素的展示位置时,模板非常有用,之后只会更改其内容而不是其展示位置。因此,您应该根据自己的需要设计layout.twig,如果需要其他布局,请随意创建一个额外的布局。例如,如果您需要两个布局,一个在内容中有一个页脚,另一个在内容外面有页脚。

并且不要在每个页面中重复extends和阻止(content):在我看来,从顶部移除extends标记不是一个好主意。页。有助于参考,知道哪个页面模板正在扩展哪个布局。而你正在做的是将模板源代码编写为PHP字符串。这不是一个好习惯。我建议您考虑将模板保存在单独的文件中,就像使用layout.twigpage.twig一样,并将所有固定内容放在其中。如果你发现自己经常重复一些代码,那么你可能想重新考虑你的模板结构,因为模板层次结构的主要优点是避免通过重用它来编写公共代码。