logo

Extra Block Types (EBT) - Neue Erfahrung im Layout Builder❗

Extra Block Types (EBT) - gestylte, anpassbare Blocktypen: Diashows, Registerkarten, Karten, Akkordeons und viele andere. Eingebaute Einstellungen für Hintergrund, DOM Box, Javascript Plugins. Erleben Sie die Zukunft der Layouterstellung schon heute.

Demo EBT-Module EBT-Module herunterladen

❗Extra Absatztypen (EPT) - Erfahrung mit neuen Absätzen

Extra Paragraph Types (EPT) - analoger, auf Absätzen basierender Satz von Modulen.

Demo EPT-Module EPT-Module herunterladen

Scroll

Erstellen benutzerdefinierter Twig-Templates für ein benutzerdefiniertes Modul

19/06/2025, by Ivan

Menu

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.