Muszę zbudować menu główne, które jest podzbiorem zwykłego menu. Zespół projektowy uważa, że lepiej byłoby, gdyby użytkownik miał tylko najważniejsze linki w menu głównym i nie miał wszystkiego. Niektóre łącza to menu najwyższego poziomu, a niektóre to podmenu. W tym celu miałem nadzieję, że będę w stanie dodać pole do formularza pozycji łącza menu jako menu rozwijane. Podczas tworzenia linku użytkownik może użyć tego menu rozwijanego do „promotToMainMenuAsBigLink” lub „promotToMainMenuAsSmallLink” lub pozostawić, aby nie wyświetlać pozycji w menu głównym.
Szukam podobnego rozwiązania, jak to rozwiązanie Drupal 7, ale Drupal 8.
Miałem nadzieję, że będę mógł dodać kolumnę w tabeli menu_link_content_data obok „expanded”. Miałem nadzieję, że nie będę musiał zapisywać tych informacji w innej tabeli, jak pokazano w rozwiązaniu d7.
Byłem w stanie dodać pole do formularza linku w niestandardowym module, który buduję, tylko dla celów testowych dodałem tylko pole tekstowe na początek:
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
);
}
}
Pole jest rzeczywiście pokazane w formie linku, ale nigdy nie jest rejestrowane.
Czy ktoś może mi w tym pomóc?
źródło
Odpowiedzi:
Sprawdź moduł menu Dodatki .
źródło
Możesz użyć,
hook_entity_base_field_info
aby dodać dodatkowe pole domenu_link_content
encji za pomocą następującego kodu:Zobacz https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions więcej szczegółów na temat
BaseFieldDefinition
.Następnie musisz
hook_form_menu_link_content_menu_link_content_form_alter()
dodać pole do formularza.źródło
BaseFieldDefinition->setDisplayOptions()
metody:...->setDisplayOptions('form', [ ... ])
.Niestety, w Drupal 8 nie ma domyślnie interfejsu użytkownika dla pól menu, jak powiedział @MatthieuScarset. Ale
menu_link_content
jest elementem treści w Drupal 8, więc można do niego dodawać pola.Opcja nr 1 Oczywiście możesz to zrobić programowo, jak sugeruje @Decipher.
Opcja nr 2 Istnieje jednak inne obejście umożliwiające tymczasowe włączenie interfejsu użytkownika pól dla łączy menu:
Drupal\menu_link_content\Entity\MenuLinkContent
field_ui_base_route = "entity.menu.add_link_form"
do adnotacji/admin/structure/menu/manage/main/add/fields
drush cex -y
).field_ui_base_route = "entity.menu.add_link_form"
z adnotacji wDrupal\menu_link_content\Entity\MenuLinkContent
źródło
Możesz użyć Colossal Menu, aby dodać pole zamiast podstawowego modułu Menu.
źródło
„Dodatki do pozycji menu” to jeden ze sposobów na osiągnięcie tego, jak sugerował @Mykhailo Gurei.
Ale w moim przypadku musiałem dodać dodatkowe pola i użyć modułu menu Mega. Użyłem „My mega menu”, a wraz z nim „Dodatki do pozycji menu” nie działają. Po prostu menu nie jest wyświetlane na interfejsie (niektóre problemy z nadpisywaniem szablonów).
Tak więc inną opcją, która działa z „My mega menu” jest „Pola zawartości pozycji menu”:
https://www.drupal.org/project/menu_item_fields
Ma tę samą funkcjonalność i nie ma konfliktu z modułem We mega menu.
źródło
Niestety, programiści Drupal 8 nie udostępnili linków menu. Dlatego na razie nie można dodawać pól do łączy menu.
Kreator stron „obejść” ma na celu stworzenie niestandardowego słownictwa, które może mieć niestandardowe pola.
źródło