2016-10-18 30 views
0

我想为使用Twig的​​做一个引导主题。现在我正在菜单上工作。我一直在寻找如何使页面活跃,我一直在看到有关块的东西。现在我的index.html看起来像这样Twig中的include和block有什么区别?

{% 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> 

这是正确的编码习惯,或者我应该做与块的东西吗?我真的不明白块如何工作。

回答

1

您可以使用新块包含全新模板。 - 这是包括做什么。您注入一个模板或其他文件中定义的模板片段。所以:

{% include 'nav.html' %} 

将注入无论你放在那里,它会取代这整个短语,这行代码nav.html的内容。

另一方面,例如,当您使用{%block body%}时,您覆盖了从父模板继承的此正文块。例如:

如果您块命名的身体base.html.twig,你会从它在另一个模板继承这样的(假设blog.html.twig):

{% extends 'base.html.twig' %} 

然后做这个:

{% block body %} 
    Hello World 
{% endblock %} 

你会把这个hello世界放在body.html.twig中。

我希望现在已经清楚。

P.S

如果你想用树枝确保您使用树枝延伸!

+0

感谢您的回答。大部分是有道理的。在块中使用导入是否是一种好的形式? – jonbon

+0

此外,什么时候使用.twig vs .html? – jonbon

+0

让我先回答第二个问题:这只是扩展,所以总是 - 如果你想使用树枝及其功能,你必须使用* .twig扩展名,并且是可以在块内部导入东西。例如,您可以创建一个用于在网站上显示错误的模板,并将其导入到任何要显示它们的位置。 – Robert

0

如果你问的最佳实践,然后,因为symfony的模板文件中提到:

当构建应用程序,你可以选择按照这个方法,或者干脆让每个页面模板扩展基础应用直接模板(例如{%extends'base.html.twig'%})。 三模板模型是供应商软件包所使用的最佳实践方法,因此可以轻松地覆盖软件包的基本模板以正确地扩展应用程序的基本布局。

这背后的想法是有:

1- 基本模板(级别1)

2-A 布局模板(级别2)

3-一个个体模板(等级3)

这是一个示例代码t帽子说明了这一点(最初是从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,但恕我直言原则应该是相同的,因为我们使用的是枝条模板引擎。

相关问题