Direkt zum Inhalt

Language Icons im Main Menu

Language Icon Menu bzw. Language Icon Menu

Schritte zur Realisierung:

  1. Template für Hauptmenu identifizieren
  2. Link für Sprachumschaltung erzeugen
  3. Link als Variable dem Template hinzufügen

 

1. Template für Hauptmenu

Für Menus wird das Template menu.html.twig verwendet (siehe Drupal 8 web/core/modules/system/templates).

Das Hauptmenu Template kann überschrieben werden, indem das Template in das eigene Theme Verzeichnis kopiert wird.
Idealerweise wird das Template spezifisch nur für das Haupmenu erstellt: menu--main.html.twig (siehe Drupal 8 Theme Hook Suggestions).    

2. Link für Sprachumschaltung erzeugen

// current url
$current_url = Url::fromRoute('<current>');

// current language
$current_language = \Drupal::languageManager()->getCurrentLanguage();

// switch to language
$switch_to_language_id = $current_language->getId() == 'de' ? 'en' : 'de';

// set url options
$options = array(
  'language' =>  \Drupal::languageManager()->getLanguage($switch_to_language_id),
);
$current_url->setOptions($options);

// set link with image render array
global  $base_path;
$markup = Markup::create('<img src="' . $base_path . drupal_get_path('module', 'my_module_name') . '/images/' . $switch_to_language_id .'.png" />');
$link = Link::fromTextAndUrl($markup, $current_url);

3. Link als Variable dem Template hinzufügen

Über den hook_preprocess_HOOK können zusätzliche Variablen in das entsprechende twig Templates hinzugefügt werden.
Für das Hauptmenu dient <my-module-name>_preprocess_menu__main(&$vars) zum Hinzufügen/Ändern von Variablen im Twig Template  menu--main.html.twig.

function my_module_name_preprocess_menu__main(&$vars) {
  ...
  $vars['language_link'] = $link->toRenderable();
  ...
}

Variable im Twig Template ausgeben:

{% if menu_level == 0 %}
   <li>{{ language_link }}</li>
{%  endif %}