Erstellen benutzerdefinierter Twig-Templates für ein benutzerdefiniertes Modul
Die allgemeine Idee in Drupal 8 ist, dass Sie vermeiden möchten, HTML direkt im PHP-Code Ihres benutzerdefinierten Moduls zu erstellen. Stattdessen soll dies in Twig-Templates ausgelagert werden. Um neue Twig-Templates in Ihrem Modul zu erstellen, führen Sie die folgenden Schritte aus.
Schritt 1: Definieren Sie hook_theme in der .module-Datei
Erstellen Sie die Datei [module].module, falls sie noch nicht existiert, und fügen Sie Code hinzu, der jedes Ihrer Twig-Templates definiert. Der Schlüssel jedes Elements im Array ist der Name, mit dem Sie das Template später aufrufen. Verwenden Sie keine Bindestriche im Dateinamen.
function test_twig_theme($existing, $type, $theme, $path) { return [ 'my_template' => [ 'variables' => ['test_var' => NULL], ], ]; }
Siehe die Dokumentation zu hook_theme().
Schritt 2: Aufruf des Templates
An der Stelle, an der Sie Ihr Render-Array zurückgeben (z.B. aus einer Controller-Methode, die über die Routing-yml-Datei Ihres Moduls aufgerufen wird oder an einer anderen Stelle), rufen Sie das Twig-Template auf. Unten sehen Sie ein Beispiel eines Testmoduls, das über eine Routing-yml-Datei aufgerufen wird. (Weitere Informationen zu diesem Teil sind erforderlich)
/** * @file * Contains \Drupal\test_twig\Controller\TestTwigController. */ namespace Drupal\test_twig\Controller; use Drupal\Core\Controller\ControllerBase; class TestTwigController extends ControllerBase { public function content() { return [ '#theme' => 'my_template', '#test_var' => $this->t('Test Value'), ]; } }
Sie können auch die Render-Methode verwenden, um Ausgaben zu generieren, falls Sie dies als Teil eines anderen Workflows in Ihrem Code benötigen:
$renderable = [ '#theme' => 'my_template', '#test_var' => 'test variable', ]; $rendered = \Drupal::service('renderer')->renderPlain($renderable);
Beachten Sie, dass dies eine einfache Implementierung ohne Caching ist. Die Dokumentation zur Render API Übersicht enthält weitere Informationen darüber, wie Sie Caching hinzufügen können. In Bezug auf Caching: Variablennamen werden gecached, und wenn Sie sie ändern (z.B. von „test_var“ zu „my_var“), müssen Sie den Cache leeren.
Schritt 3: Erstellen Sie das Twig-Template
Erstellen Sie in Ihrem Modul im Templates-Ordner die Twig-Template-Datei. Der Dateiname muss mit dem übereinstimmen, was Sie in hook_theme() definiert haben (ersetzen Sie Unterstriche durch Bindestriche). In diesem Fall heißt die Datei my-template.html.twig.
Hier ist die Datei, die ich zum Testen verwendet habe:
<p>Test Twig Template!</p> <p>test_var: {{ test_var }}</p>
Das Tolle daran ist, dass die Template-Datei, die in Ihrem Modul definiert ist, verwendet wird, falls keine entsprechende Datei in Ihrem Theme existiert. Legen Sie die Datei einfach in den Templates-Ordner Ihres Themes, leeren Sie den Cache (drush cache-rebuild), und Drupal liest diese Datei dann.
Sie können die Datei auch in einem beliebigen Unterordner Ihres Site-Themes ablegen, um die Organisation zu verbessern.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.