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 %}
答案 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.twig
和page.twig
一样,并将所有固定内容放在其中。如果你发现自己经常重复一些代码,那么你可能想重新考虑你的模板结构,因为模板层次结构的主要优点是避免通过重用它来编写公共代码。