Preciso criar um menu principal que seja um subconjunto do menu regular. A equipe de design acha que seria melhor o usuário ter apenas os links mais importantes no menu principal e não ter tudo. Alguns links são menu de nível superior e outros são submenus. Para isso, esperava poder adicionar um campo ao formulário do item do link do menu como uma lista suspensa. Ao criar um link, o usuário pode usar esse menu suspenso para "promotionToMainMenuAsBigLink" ou "promotionToMainMenuAsSmallLink" ou deixar nenhum para não mostrar o item no menu principal.
Estou procurando uma solução semelhante à Drupal 7, mas Drupal 8.
Eu esperava poder adicionar uma coluna na tabela menu_link_content_data ao lado de 'expandido'. Eu esperava não ter que registrar essas informações em outra tabela, como mostrado na solução d7.
Consegui adicionar um campo ao formulário do link em um módulo personalizado que construí, apenas para fins de teste, apenas adicionei um campo de texto para começar:
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
);
}
}
O campo é realmente mostrado no formulário do link, mas nunca é registrado.
alguém poderia me ajudar com isso?
fonte
Respostas:
Verifique o módulo de itens extras do menu .
fonte
Você pode usar
hook_entity_base_field_info
para adicionar um campo adicional àmenu_link_content
entidade com o seguinte código:Consulte https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions para obter mais detalhes
BaseFieldDefinition
.Depois disso, você precisará
hook_form_menu_link_content_menu_link_content_form_alter()
adicionar um campo ao formulário.fonte
BaseFieldDefinition->setDisplayOptions()
método:...->setDisplayOptions('form', [ ... ])
.Infelizmente, não há campos de interface do usuário para links de menu por padrão no Drupal 8, como disse @MatthieuScarset. Como
menu_link_content
é uma entidade de conteúdo no Drupal 8, é possível adicionar campos a ele.Opção 1 É claro que você pode fazer isso de forma programática, como o @Decipher sugeriu.
Opção 2 Mas há outra solução alternativa para ativar os campos da interface do usuário para os links do menu temporariamente:
Drupal\menu_link_content\Entity\MenuLinkContent
field_ui_base_route = "entity.menu.add_link_form"
à anotação/admin/structure/menu/manage/main/add/fields
drush cex -y
).field_ui_base_route = "entity.menu.add_link_form"
da anotação emDrupal\menu_link_content\Entity\MenuLinkContent
fonte
Você pode usar o menu colossal para adicionar o campo em vez do módulo de menu principal.
fonte
"Itens extras do menu" é uma maneira de conseguir isso, como sugeriu @Mykhailo Gurei.
Mas no meu caso eu tive que adicionar campos extras e usar o módulo de menu Mega. Eu estava usando "We mega menu" e com ele "Menu item extras" não está funcionando. Simplesmente o menu não é mostrado no front-end (alguns modelos substituem o problema).
Portanto, outra opção que funciona com "We mega menu" é "Campos de conteúdo do item de menu":
https://www.drupal.org/project/menu_item_fields
Tem a mesma funcionalidade e não tem conflito com o módulo mega do menu We.
fonte
Infelizmente, os principais desenvolvedores do Drupal 8 não tornaram os links de menu em campo. Portanto, não é possível adicionar campos aos links do menu no momento.
O construtor de sites "solução alternativa" é criar um vocabulário personalizado que pode ter campos personalizados.
fonte