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

Vorverarbeitung und Änderung von Attributen in der .theme-Datei

19/06/2025, by Ivan

Wie in Drupal 7 können Sie die Ausgabe bestimmter HTML-Elemente über Preprocess-Funktionen beeinflussen. Wenn Sie beispielsweise einer Menüausgabe eine Klasse hinzufügen möchten und dies lieber auf PHP-Ebene tun, ist das möglich. Dies ist ein guter Weg, um themenbezogene Markup-Anpassungen vorzunehmen. Möchten Sie jedoch themenunabhängiges Markup erstellen, ist es besser, ein eigenes Modul zu schreiben.

(Hinweis: In dieser Dokumentation steht „mytheme“ für den Maschinennamen Ihres Themes, z. B. ist „bartik“ der Maschinename des Bartik-Themes.)

So arbeiten Sie mit Preprocess-Funktionen:

1. Erstellen oder bearbeiten Sie eine Datei im Verzeichnis Ihres Themes namens mytheme.theme

2. Erstellen Sie eine Funktion wie mytheme_preprocess_HOOK, wobei HOOK das Element bezeichnet, das Sie beeinflussen möchten*

3. Schreiben Sie Ihre Anpassungen und speichern Sie die Datei

4. Leeren Sie den Cache, damit Ihre Änderungen wirksam werden (wenn Sie Drush installiert haben, führen Sie drush cr in der Kommandozeile aus)

* Die HOOK-Namen orientieren sich an Twig-Template-Konventionen. Um einen Hook für page.html.twig zu erstellen, heißt die Funktion mytheme_preprocess_page. Für einen Node-Template-Hook wie article.html.twig erstellen Sie mytheme_preprocess_node__article (Bindestriche werden durch Unterstriche ersetzt). Um Hook-Namen zu finden, siehe Abschnitt „Template-Dateien mit Debugging finden“.

Angenommen, Sie möchten allen Menüs auf Ihrer Seite die Klasse my-menu hinzufügen. Wenn Ihr Theme „mytheme“ heißt, schreiben Sie diese Funktion:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  // Falls kein Klassen-Array existiert, ein leeres Array erstellen.
  if (!isset($variables['attributes']['class'])) {
    $variables['attributes']['class'] = [];
  }
  // Vorhandene Klassen mit 'my-menu' zusammenführen
  $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-menu']);
}

Das ist sehr ähnlich wie in Drupal 7 und hilfreich, wenn Sie ein bestimmtes Menü anpassen möchten.

Sie können das $variables-Objekt mit Bedingungen prüfen, um herauszufinden, mit welchem Menü Sie arbeiten. Die Elemente in $variables werden nach der Preprocess-Verarbeitung in Twig verfügbar.

Um das Beispiel zu erweitern: Angenommen, Sie möchten der Hauptnavigation Ihres Sites die Klasse „my-main-menu“ hinzufügen. Die Funktion dafür sieht so aus:

/**
* Implements hook_preprocess_HOOK() for menu.html.twig.
*/
function mytheme_preprocess_menu(&$variables) {
  if ($variables['menu_name'] == 'main') {
    if (!isset($variables['attributes']['class'])) {
      $variables['attributes']['class'] = [];
    }
    $variables['attributes']['class'] = array_merge($variables['attributes']['class'], ['my-main-menu']);
  }
}

Unterschiede zu Drupal 7

Die Datei template.php gibt es nicht mehr. Sie wurde durch mytheme.theme ersetzt. Trotzdem funktioniert sie weiterhin ähnlich und erlaubt Hooks, die Ausgabe zu verändern.

Weitere nützliche Links

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.