Twig 模板继承问题

Twig Template Inheritance Issues

我正在尝试为我的 Craft CMS 安装设置一个干净的结构,但是在一些 非常 基本的树枝和构建我的东西的好方法方面遇到了问题。

See this gist - 为什么我的导航栏不会在此示例中显示?

更好的是,我想像这样构建我的网站 - 但它没有显示任何内容? - another gist

我是不是以某种方式错误地混合了 extend/block 模式?这感觉非常基础,因此非常令人沮丧。如果有任何帮助,我将不胜感激。

在您的第一个要点中,在 index.twig 中,您正确地扩展了 base.twig。但是,您没有指定 navbar 块的内容,因此该块默认为 base.twig.

中设置的空内容

您可以使用 include function:

更改 base.twig 以包含 navbar.twig
...
  <div id="content">
    {% include "navbar.twig" %}
    {% block content %}{% endblock %}
  </div>
...

您也不应在 navbar.twig 中扩展 base.twig 以防止无限递归(base 包括 navbar,扩展 base,其中包括 navbar, ...).

如果您希望导航栏在 index.twig 和其他文件中被覆盖,您可以在 base.twig 中保留 navbar 块并将其默认内容设置为包含 navbar.twig:

...
  <div id="content">
    {% block content %}
      {% include "navbar.twig" %}
    {% endblock %}
    {% block content %}{% endblock %}
  </div>
...

然后,在 index.twig 中,如果您省略 {% block navbar %}{% endblock %},导航栏将使用 navbar.twig 中的内容。或者您也可以覆盖 navbar 块的内容:

{% extends "base" %}

{% block navbar %}
  <h2>Overridden navbar</h2>
{% endblock %}

{% block content %}
  <h2>Main content</h2>
{% endblock %}

在你的第二个要点中,在 index.twig 中,你可以将 {% block head %}{% endblock %} 更改为 {% include "head.twig" %} 等等。在 head.twig 和其他文件中,您不应该再次扩展 index.twig 以防止无限递归。

我建议您查看 Twig's documentation about the extends tag 以了解块和模板的实际工作原理。在你的两个要点中,块和模板使用不正确。