J'ai besoin de construire un menu principal qui est un sous-ensemble du menu régulier. L'équipe de conception pense qu'il serait préférable pour l'utilisateur de n'avoir que les liens les plus importants dans le menu principal et de ne pas tout avoir. Certains liens sont des menus de niveau supérieur et certains sont des sous-menus. Pour cela, j'espérais pouvoir ajouter un champ au formulaire d'élément de lien de menu sous forme de liste déroulante. Lors de la création d'un lien, l'utilisateur peut utiliser cette liste déroulante pour "promouvoirToMainMenuAsBigLink" ou "promouvoirToMainMenuAsSmallLink" ou n'en laisser aucun pour ne pas afficher l'élément dans le menu principal.
Je cherche une solution similaire à cette solution Drupal 7 mais pour Drupal 8.
J'espérais pouvoir ajouter une colonne dans la table menu_link_content_data à côté de 'expand'. J'espérais ne pas avoir à enregistrer ces informations dans un autre tableau comme indiqué dans la solution d7.
J'ai pu ajouter un champ au formulaire de lien dans un module personnalisé que je construis, juste à des fins de test, j'ai seulement ajouté un champ de texte pour commencer:
custom_menu.module:
function custom_menu_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if($form_id == 'menu_link_content_menu_link_content_form') {
$form['promoteToMainMenu'] = array(
'#type' => 'textfield',
'#title' => t('Promote to main menu'),
'#description' => t('Promote link menu to main menu.'),
'#default_value' => '',
'#weight' => -9
);
}
}
Le champ est en effet affiché dans le formulaire de lien mais il n'est jamais enregistré.
Quelqu'un peut il m'aider avec ça?
la source
Réponses:
Vérifiez le module Options de menu supplémentaires .
la source
Vous pouvez utiliser
hook_entity_base_field_info
pour ajouter un champ supplémentaire à l'menu_link_content
entité avec le code suivant:Voir https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions pour plus de détails sur
BaseFieldDefinition
.Après quoi, vous devrez
hook_form_menu_link_content_menu_link_content_form_alter()
ajouter un champ au formulaire.la source
BaseFieldDefinition->setDisplayOptions()
méthode:...->setDisplayOptions('form', [ ... ])
.Malheureusement, il n'y a en effet aucun champ UI pour les liens de menu par défaut dans Drupal 8 comme l'a dit @MatthieuScarset. Mais
menu_link_content
est une entité de contenu dans Drupal 8, il est donc possible d'y ajouter des champs.Option # 1 Bien sûr, vous pouvez le faire par programme comme l'a suggéré @Decipher.
Option # 2 Mais il existe une autre solution pour activer temporairement les champs UI pour les liens de menu:
Drupal\menu_link_content\Entity\MenuLinkContent
field_ui_base_route = "entity.menu.add_link_form"
à l'annotation/admin/structure/menu/manage/main/add/fields
drush cex -y
).field_ui_base_route = "entity.menu.add_link_form"
de l'annotation àDrupal\menu_link_content\Entity\MenuLinkContent
la source
Vous pouvez utiliser Colossal Menu pour ajouter le champ au lieu du module de menu principal.
la source
"Extras des éléments de menu" est un moyen d'y parvenir, comme l'a suggéré @Mykhailo Gurei.
Mais dans mon cas, j'ai dû ajouter des champs supplémentaires et utiliser le module de menu Mega. J'utilisais "We mega menu" et avec lui "Menu item extras" ne fonctionne pas. Le menu simple n'est pas affiché sur le front-end (certains modèles remplacent le problème).
Donc, une autre option qui fonctionne avec "We mega menu" est "Field item content fields":
https://www.drupal.org/project/menu_item_fields
A la même fonctionnalité et n'a pas de conflit avec le module de menu We mega.
la source
Malheureusement, les développeurs principaux de Drupal 8 n'ont pas rendu les liens de menu modifiables. Il n'est donc pas possible d'ajouter des champs aux liens de menu pour l'instant.
Le constructeur de site "contourner" consiste à créer un vocabulaire personnalisé qui peut avoir des champs personnalisés.
la source