2016-10-18 29 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,但恕我直言原則應該是相同的,因爲我們使用的是枝條模板引擎。

相關問題