Ich muss ein Hauptmenü erstellen, das eine Teilmenge des regulären Menüs ist. Das Designteam hält es für besser, wenn der Benutzer nur die wichtigsten Links im Hauptmenü hat und nicht alles. Einige Links sind Menüs der obersten Ebene und andere Untermenüs. Zu diesem Zweck hatte ich gehofft, dem Menü-Link-Element-Formular ein Feld als Dropdown-Liste hinzufügen zu können. Beim Erstellen eines Links kann der Benutzer diese Dropdown-Liste verwenden, um "fördernToMainMenuAsBigLink" oder "fördernToMainMenuAsSmallLink" oder "keine", um das Element nicht im Hauptmenü anzuzeigen.
Ich suche nach einer ähnlichen Lösung wie diese Drupal 7-Lösung, aber nach Drupal 8.
Ich hatte gehofft, in der Tabelle menu_link_content_data neben 'erweitert' eine Spalte hinzufügen zu können. Ich hatte gehofft, diese Informationen nicht in einer anderen Tabelle wie in der d7-Lösung aufzeichnen zu müssen.
Ich konnte dem Linkformular in einem von mir erstellten benutzerdefinierten Modul ein Feld hinzufügen. Zu Testzwecken habe ich zunächst nur ein Textfeld hinzugefügt:
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
);
}
}
Das Feld wird zwar im Linkformular angezeigt, aber nie aufgezeichnet.
Kann mir jemand dabei helfen?
quelle
Antworten:
Überprüfen Sie das Menüelement-Extras- Modul.
quelle
Sie können
hook_entity_base_field_info
dermenu_link_content
Entität ein zusätzliches Feld mit dem folgenden Code hinzufügen :Weitere Informationen zu finden Sie unter https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions
BaseFieldDefinition
.Danach müssen Sie
hook_form_menu_link_content_menu_link_content_form_alter()
dem Formular ein Feld hinzufügen.quelle
BaseFieldDefinition->setDisplayOptions()
Methode verwenden :...->setDisplayOptions('form', [ ... ])
.Leider gibt es in Drupal 8 standardmäßig keine Benutzeroberfläche für Menüverknüpfungen, wie @MatthieuScarset sagte. Da
menu_link_content
es sich jedoch um eine Inhaltsentität in Drupal 8 handelt, können Felder hinzugefügt werden.Option 1 Natürlich können Sie dies programmgesteuert tun, wie von @Decipher vorgeschlagen.
Option 2 Es gibt jedoch eine andere Problemumgehung, um die Benutzeroberfläche für Felder für Menüverknüpfungen vorübergehend zu aktivieren:
Drupal\menu_link_content\Entity\MenuLinkContent
field_ui_base_route = "entity.menu.add_link_form"
auf die Anmerkung/admin/structure/menu/manage/main/add/fields
drush cex -y
).field_ui_base_route = "entity.menu.add_link_form"
Aus der Anmerkung unter entfernenDrupal\menu_link_content\Entity\MenuLinkContent
quelle
Sie können das kolossale Menü verwenden , um das Feld anstelle des Kernmenümoduls hinzuzufügen.
quelle
Leider haben Drupal 8-Kernentwickler Menü-Links nicht feldfähig gemacht. Daher ist es derzeit nicht möglich, Felder zu Menü-Links hinzuzufügen.
Der Site Builder "umgeht" besteht darin, ein benutzerdefiniertes Vokabular zu erstellen, das benutzerdefinierte Felder enthalten kann.
quelle