J'essaie de traduire le champ "activé" des éléments de menu dans Drupal 8. Jusqu'à présent, j'ai écrit ce code dans le fichier MYMODULE.module
:
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;
}
Cela fonctionne bien et je suis en mesure de définir le champ activé différemment pour différentes langues. par exemple: pour le même élément de menu, je peux vérifier le champ "activé" pour l'anglais, mais décochez le champ "activé" pour le français.
Mais cela ne fonctionne pas comme prévu. Il masque l'élément de menu pour toutes les langues. Dois-je utiliser hook_preprocess()
ou hook_preprocess_menu()
ou un autre crochet pour l'élément de menu à afficher/masquer en fonction du champ "activé" dans différentes langues? Quelqu'un peut-il me donner des indices à ce sujet?
Pour ce que vous essayez de réaliser, j'ai découvert que vous pouvez utiliser le module Menu Manipulator . Ce module visait initialement à corriger [Problème] Les éléments de menu non traduits sont affichés dans les menus .
Remarques
Ce module vise initialement à corriger ce problème principal avec les éléments de menu non traduits .
Après avoir installé ce module, seuls les éléments de menu disponibles dans la langue actuelle seront affichés. S'il y a un élément de menu dont vous n'avez pas besoin dans une certaine langue, supprimez-le ou supprimez sa traduction.
Pour que cela fonctionne correctement, assurez-vous que votre menu, le titre du menu et "Afficher le sélecteur de langue sur les pages de création et de modification" sont activés pour votre menu sous https://example.com/admin/config/regional/content -langue .
L'ajout de ce code dans Drupal/core/modules/menu_link_content/Plugin/Menu/MenuLinkContent.php a fait fonctionner la fonctionnalité exactement comme prévu. (Les éléments du menu ont été désactivés dans une langue mais activés dans une autre)
public function isEnabled() {
if ($this->languageManager->isMultilingual()) {
return $this->getEntity()->isEnabled();
}
return $this->pluginDefinition['enabled'];
}
Mais je ne sais pas comment étendre cette classe dans mon module personnalisé et la rendre visible à drupal .. Des idées à ce sujet?