我正在尝试为使用Twig的PhileCMS制作一个引导主题。现在我在菜单上工作。我一直在寻找如何使一个页面活跃,我一直在看到关于块的东西。现在我的index.html看起来像这样
{% include 'header.html' %}
<body>
{% include 'nav.html' %}
<div class="container"}
{{ content }}
{% include 'footer.html' %}
我的nav.html看起来像这样:
<div class="header clearfix">
<nav>
<ul class="nav nav-pills pull-right">
<li role="presentation"><a class="{% if app.request.attributes.get('_route') starts with 'home' %}active{% endif %}">Home</a></li>
<li role="presentation"><a class="{% if app.request.attributes.get('_route') starts with 'about' %}active{% endif %}">About</a></li>
<li role="presentation"><a class="{% if app.request.attributes.get('_route') starts with 'contact' %}active{% endif %}">Contact</a></li>
</ul>
</nav>
<h3 class="text-muted">{{ site_title }}</h3>
</div>
这是正确的编码练习,还是我应该用块做什么?我真的不明白块是如何工作的。
答案 0 :(得分:1)
您可以使用新块包含全新模板。 - 那是包括做什么的。您注入在其他文件中定义的模板或模板。所以:
{% include 'nav.html' %}
将注入你放在那里的任何东西,它将取代整个短语,这行代码含有nav.html的内容。
另一方面,当您使用{%block body%}时,您将覆盖从父模板继承的此主体块。例如:
如果你在base.html.twig中有块名为body,你将在另一个模板中继承它(比如说blog.html.twig):
{% extends 'base.html.twig' %}
然后执行此操作:
{% block body %}
Hello World
{% endblock %}
您将把这个hello世界放在base.html.twig中的body块中。
我希望你现在清楚了。
P.S
如果你想使用树枝,请确保使用树枝延伸!
答案 1 :(得分:0)
如果您要求最佳实践,那么正如Symfony的Templating文档中所述:
在构建应用程序时,您可以选择使用此方法,或者只是让每个页面模板直接扩展基本应用程序模板(例如{%extends'base.html.twig'%})。 三模板模型是供应商包使用的最佳实践方法,因此可以轻松覆盖包的基本模板,以正确扩展应用程序的基本布局。
这背后的想法是:
1- 基本模板(1级)
2-A 布局模板(2级)
3 - 个人模板(级别3)
以下是一个示例代码(最初来自Symfony2)documentation
{# layout.html.twig #}
{% extends 'base.html.twig' %}
{% block body %}
<h1>Blog Application</h1>
{% block content %}{% endblock %}
{% endblock %}
{# index.html.twig #}
{% extends 'layout.html.twig' %}
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
p.s :即使你很难处理Symfony2,但恕我直言的原则应该是一样的,因为我们使用的是Twig模板引擎。