2016-10-18 1 views
0

Ich versuche ein Bootstrap-Thema für PhileCMS, die Twig verwendet. Im Moment arbeite ich an der Speisekarte. Ich habe gesucht, um herauszufinden, wie man eine Seite aktiv macht, und ich habe Sachen über Blöcke gesehen. Gerade jetzt meine index.html sieht so etwas wie dieserWas ist der Unterschied zwischen Include und Block in Twig?

{% include 'header.html' %} 
<body> 
{% include 'nav.html' %} 
<div class="container"} 
{{ content }} 
{% include 'footer.html' %} 

Mein nav.html etwa wie folgt aussieht:

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

Ist die richtige Codierung der Praxis, oder soll ich etwas mit Blöcken tun? Ich verstehe nicht wirklich, wie Blöcke funktionieren.

Antwort

1

Sie können eine ganz neue Vorlage mit neuen Blöcken einfügen. - Dazu gehört auch. Sie injizieren eine Vorlage oder eine Vorlage, die in einer anderen Datei definiert ist. Also:

{% include 'nav.html' %} 

wird injizieren, was Sie da haben, setzen und es wird diese ganze Phrase ersetzen, diese Codezeile mit dem Inhalt von nav.html.

Wenn Sie andererseits {% block body%} verwenden, überschreiben Sie diesen Körperblock, der von der übergeordneten Vorlage geerbt wird. Zum Beispiel:

Wenn Sie Block namens Körper in base.html.twig haben, und Sie werden von ihm wie diese in einer anderen Vorlage erben (sagen wir mal blog.html.twig):

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

und dann tun dies:

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

Sie werden diese Hallo Welt innerhalb des Körperblocks in base.html.twig setzen.

Ich hoffe, es ist Ihnen jetzt klar.

P. S

Wenn Sie Zweig stellen Sie sicher, verwenden möchten, verwenden Sie Zweig Verlängerung! wie sie in dem Templating Dokumentation des Symfony erwähnt

+0

Danke für die Antwort. Meistens macht es Sinn. Ist es sinnvoll, den Import innerhalb eines Blocks zu verwenden? – jonbon

+0

Und wann benutzt man .twig vs .html? – jonbon

+0

Lassen Sie mich zweite Frage zuerst beantworten: Es ist nur Erweiterung also immer - wenn Sie Zweig und seine Funktionen verwenden möchten, müssen Sie * .twig Erweiterung und ja, es ist in Ordnung, Ding in einem Block zu importieren. Sie könnten beispielsweise eine Vorlage für die Anzeige von Fehlern auf der Website erstellen und sie einfach dorthin importieren, wo Sie sie anzeigen möchten. – Robert

0

Wenn Sie Best Practices fragen, dann:

Wenn Ihre Anwendung erstellen, können Sie diese Methode folgen wählen oder einfach jede Seite Vorlage, um die Basisanwendung machen erweitern Vorlage direkt (zB {% erweitert 'base.html.twig'%}). Das Drei-Vorlagen-Modell ist eine Best-Practice-Methode, die von Lieferantenbündeln verwendet wird, sodass die Basisvorlage für ein Paket leicht überschrieben werden kann, um das Basislayout Ihrer Anwendung ordnungsgemäß zu erweitern.

Die Idee dahinter ist, haben:

1- a Basisvorlage (Stufe 1)

2-A Layoutvorlage (Stufe 2)

3- Eine individuelle Vorlage (Ebene 3)

Hier ist ein Beispielcode t Hut zeigt diese (ursprünglich aus dem 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: Selbst schwere würden Sie nicht mit Symfony2 zu tun haben, aber meiner Meinung nach das Prinzip sollte gleich sein, da wir den Zweig Templating-Engine verwenden.

Verwandte Themen