it-swarm.com.de

Wie kann ich den sprachspezifischen "aktivierten" Booleschen Wert der Menüelemente berücksichtigen?

Ich versuche, das Feld 'aktiviert' der Menüelemente in Drupal 8.) zu übersetzen. Bisher habe ich diesen Code in die Datei MYMODULE.module Geschrieben:

function MYMODULE_entity_base_field_info_alter(&$fields, \Drupal\Core\Entity\EntityTypeInterface $entity_type) {
  if ($entity_type->id() == 'menu_link_content' && !empty($fields['enabled'])) {
    $fields['enabled']->setTranslatable(TRUE);
  }
  return $fields;
} 

Dies funktioniert gut und ich kann das aktivierte Feld für verschiedene Sprachen unterschiedlich einstellen. Beispiel: Für denselben Menüpunkt kann ich das Feld "Aktiviert" auf Englisch aktivieren, aber das Feld "Aktiviert" auf Französisch deaktivieren.

Aber es funktioniert nicht wie erwartet. Der Menüpunkt für alle Sprachen wird ausgeblendet. Sollte ich hook_preprocess() oder hook_preprocess_menu() oder einen anderen Hook verwenden, damit der Menüpunkt basierend auf dem Feld 'enabled' in verschiedenen Sprachen angezeigt/ausgeblendet wird? Kann mir jemand einen Hinweis dazu geben?

3
user93578

Für das, was Sie erreichen möchten, habe ich herausgefunden, dass Sie das Modul Menu Manipulator verwenden können. Dieses Modul hatte ursprünglich zum Ziel, [Problem] nicht übersetzte Menüelemente werden in Menüs angezeigt .

Anmerkungen

Dieses Modul zielt zunächst darauf ab, dieses Kernproblem mit nicht übersetzten Menüelementen zu beheben .


Wenn dieses Modul installiert ist, werden nur Menüelemente angezeigt, die in der aktuellen Sprache verfügbar sind. Wenn es einen Menüpunkt gibt, den Sie in einer bestimmten Sprache nicht benötigen, entfernen Sie ihn oder entfernen Sie seine Übersetzung.

Stellen Sie sicher, dass Ihr Menü, der Menütitel und "Sprachauswahl beim Erstellen und Bearbeiten von Seiten anzeigen" für Ihr Menü unter https: //example.com/admin/config/regional/content aktiviert sind -Sprache .

  • Wenn Sie einen Menüpunkt haben, der nur auf der französischen Website angezeigt werden soll, wählen Sie Französisch als Sprache aus und übersetzen Sie ihn nicht.
  • Wenn ein Menüelement nur auf der englischen Website angezeigt werden soll, wählen Sie Englisch als Sprache aus und übersetzen Sie es nicht.
  • Wenn auf beiden Websites ein Menüelement angezeigt werden soll, fügen Sie ihn in einer Sprache hinzu und übersetzen Sie ihn einfach.
1
leymannx

Durch Hinzufügen dieses Codes in Drupal/core/modules/menu_link_content/Plugin/Menu/MenuLinkContent.php funktionierte die Funktionalität genau wie erwartet. (Menüelemente wurden in einer Sprache deaktiviert, in einer anderen jedoch aktiviert.)

public function isEnabled() {

        if ($this->languageManager->isMultilingual()) {
          return $this->getEntity()->isEnabled();
        }
        return $this->pluginDefinition['enabled'];
    }

Aber ich bin mir nicht sicher, wie ich diese Klasse in meinem benutzerdefinierten Modul erweitern und für Drupal sichtbar machen soll. Irgendwelche Ideen dazu?

0
user93578