Direkt zum Inhalt

ÄNDERUNGEN VON MENÜ-LINKS

webfejlesztés
drupal
modul
ui
back-end fejlesztés
Nehmen wir an, Sie möchten vor dem Text des Menü-Links etwas HTML-Code hinzufügen. Vielleicht möchten Sie Font Awesome Code oder etwas ähnliches einfügen. Leider gibt es im CMS keine einfache Möglichkeit, dies out of box zu tun. Aber ...

Nehmen wir an, Sie möchten vor dem Text des Menü-Links etwas HTML-Code hinzufügen. Vielleicht möchten Sie Font Awesome Code einfügen, der in etwa so aussieht:

<i class="fas fa-home"></i>

Leider gibt es keinen einfachen Weg, dies out of box im CMS zu erledigen. Sie können HTML-Code in das Titelfeld des Menülinks wie folgt eingeben:

Menu link title


aber dieser Code wird verschwinden, also hat es keinen Sinn dies zu tun. Sie werden nur folgendes bekommen:
 

Escaped HTML


Das sieht wirklich schlecht aus, damit brauchen wir offensichtlich eine andere Lösung. Wie bei einigen vielen Situationen in Drupal - Hooks eilt zur Rettung!

In Drupal 8 können Sie den Hook hook_link_alter(&$variables) verwenden, um Menü-Links zu ändern. So sieht das Argument $variables aus:

Menu link dpm


Wie Sie sehen, können Sie hier den Linktext ändern. Es gibt jedoch keine einfache Möglichkeit, diesen Menü-Link zu identifizieren. Sie können nicht sagen, welches Menü diesen Link enthält. Wenn Sie also nicht alle Links auf Ihrer Website ändern möchten ist es eine schlechte Idee diesen Haken zu verwenden, um Menü-Links genau zu markieren.

Es sei denn, Sie fügen irgendwie einen Identifikator hinzu.

Glücklicherweise können Sie genau das ganz einfach umsetzen und all dies dynamischer gestalten. Sie können den form_alter()verwenden, um das Formular zum Bearbeiten von Menü-Links zu ändern und etwas in der Art hinzufügen:

Alter menu link edit form


Ziemlich cool, oder? Nicht nur, dass Sie HTML-Code mit einem bestimmten Menü-Link verknüpfen können, Sie können sogar wählen wo Sie ihn platzieren möchten.

Sie können die neuen Feldwerte (HTML und Position) in Menülink-Optionen speichern. Menü-Link-Optionen ist eine serialisierte Anordnung von Optionen für den Link, so dass Sie diese Anordnung nach Belieben ändern können.

Jetzt ist es viel einfacher hook_link_alter(), zu verwenden, weil Sie den HTML-Code erhalten und den Link-Titel so ändern können:

/**
 * Implements hook_link_alter().
 */
function link_alter_link_alter(&$variables) {

...

  $html = $variables['options']['html'];

  $variables['text'] = new FormattableMarkup($html . ' @title', [
    '@title' => $variables['text'],
  ]);

...

}

Ich habe ein kleines Modul zusammengestellt, damit Sie es sich ansehen können und sehen, wie das alles funktioniert.

https://github.com/gnikolovski/link_alter