it-swarm.com.de

Fügen Sie eine Teilvorlage hinzu

Ich versuche, Drupal 8, mit einem benutzerdefinierten Thema, aufgrund großer Strukturunterschiede für meine Anforderungen zu verwenden. Ich habe eine Seite - front.twig.html und eine page.twig.html, I. Ich möchte Vorlagenteile erstellen, wie sie in phrozn oder in einem normalen Symfony2-Projekt verwendet werden, z. B. eine footer.html.twig und eine header.html.twig. Diese Vorlagen werden unter einem Unterverzeichnis/parts/gespeichert.

Wenn ich diese Vorlagen jedoch wie gewohnt aufrufe, erhalte ich nur eine Zeichenfolge mit dem Namen der Vorlage.

Zum Beispiel:

{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 

Gibt den Dateinamen als Zeichenfolge zurück:

parts/footer.html.twig

Es ist möglich, das mit Drupal 8?

21
felipep

Sie können keine relativen Pfade erstellen. Alle Pfade müssen entweder vom Stamm Drupal root) stammen oder auf dem Pfad mit dem Namespace zu Ihrem 'Vorlagen'-Verzeichnis basieren: https: //www.drupal .org/node/2143557 .

Ich würde "from the Drupal root") vermeiden und Namespaces verwenden, zumindest bis https://www.drupal.org/node/2291449 aufgelöst ist.

{% include '@mytheme/parts/footer.html.twig' %}

Bearbeiten: Wenn Sie zusätzliche Argumente für die Schleife oder zum Überprüfen einiger Variablen an Ihre enthaltene twig Vorlage übergeben möchten, sollten Sie folgendermaßen schreiben:

{% include '@mytheme/includes/form-block.html.twig' with {dog: true} %}

Bearbeiten: Nachdem https://www.drupal.org/node/2291449 festgeschrieben wurde, können Sie auch Folgendes tun:

{% include 'footer.html.twig' %}

Unter https://www.drupal.org/node/2369981 erfahren Sie, warum Sie den Dateinamen als Zeichenfolge anstelle einer hilfreichen Ausnahme gesehen haben.

35
Cottser

Verwenden Sie einen vollständigen Pfad zum Themenverzeichnis. Wenn Sie den Namespace verwenden, müssen Sie ihn ändern, wenn Sie den Code auf eine andere Site oder ein anderes Thema bringen.

Das sollte funktionieren:

{% include directory ~ '/templates/parts/footer.html.twig' %}
16
André

Beachten Sie, dass Sie Variablen nach dem Schlüsselwort with übergeben können:

{# template.html will have access to the variables from the current context and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}

{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}

Siehe Twig Dokumentation http://twig.sensiolabs.org/doc/tags/include.html

6

Es ist auch möglich, Twigs Verwendung eines Arrays zu verwenden, um einen Fallback zu erstellen, wenn die Datei nicht vorhanden ist.

Z.B. Wenn footer.html.twig nicht verfügbar ist, wird defaultfooter.html.twig verwendet.

{{ include([
  '@yourthemename/parts/footer.html.twig',
  '@yourthemename/parts/defaultfooter.html.twig'
]) }}

Nb: Ich versuche immer noch herauszufinden, ob dies die beste Vorgehensweise ist oder nicht.

5
granticusiv

Nachdem Add Twig Template-Vererbung basierend auf der Theme-Registrierung, aktivieren Sie das Hinzufügen von Twig Loaders festgeschrieben wurde, können Sie auch die verwenden folgende Zeile.

{% include 'footer.html.twig' %}
4
Yusef

Für Drupal 8

Einschließlich einer twig Datei im Thema wenn Sie ein {% include 'FILE_NAME.html.twig' %} Drupal erwartet, dass sich Ihre DATEI in Ihrem aktuellen Themenverzeichnis befindet. Legen Sie sie einfach dort ab und es wird funktionieren.

Einschließlich einer twig Datei in Ihrem Modul

Wenn Sie es in ein MODUL einfügen möchten, müssen Sie es in der THEMA-Funktion deklarieren. Fügen Sie in Ihrer .module-Datei einfach Folgendes hinzu:

<?php function YOUR_MODULE_NAME_theme($existing, $type, $theme, $path) {   
   'FILE_NAME' => [
      'variables' => [
      ],
      'template' => 'FILE_NAME',
    ], ?>

Fügen Sie dann Ihre Datei Twig) in YOUR_MODULE/template/FILE_NAME.html.twig ein

1
Karim Rachadi