Necesito crear un menú principal que sea un subconjunto del menú normal. El equipo de diseño cree que sería mejor para el usuario tener solo los enlaces más importantes en el menú principal y no tenerlo todo. Algunos enlaces son menús de nivel superior y otros son submenús. Para esto esperaba poder agregar un campo al formulario de elemento de enlace de menú como un menú desplegable. Al crear un enlace, el usuario podría usar este menú desplegable para "promoteToMainMenuAsBigLink" o "promoteToMainMenuAsSmallLink" o no dejar ninguno para que no se muestre el elemento en el menú principal.
Estoy buscando una solución similar a esta solución Drupal 7 pero para Drupal 8.
Esperaba poder agregar una columna en la tabla menu_link_content_data al lado de 'expandido'. Esperaba no tener que registrar esta información en otra tabla como se muestra en la solución d7.
Pude agregar un campo al formulario de enlace en un módulo personalizado que construí, solo para fines de prueba solo agregué un campo de texto para comenzar:
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
);
}
}
El campo se muestra en el formulario de enlace, pero nunca se registra.
¿Puede alguien ayudarme con esto?
fuente
Respuestas:
Verifique el módulo Extras del elemento del menú .
fuente
Puede usar
hook_entity_base_field_info
para agregar un campo adicional a lamenu_link_content
entidad con el siguiente código:Consulte https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions para obtener más detalles
BaseFieldDefinition
.Después de lo cual,
hook_form_menu_link_content_menu_link_content_form_alter()
deberá agregar un campo al formulario.fuente
BaseFieldDefinition->setDisplayOptions()
método:...->setDisplayOptions('form', [ ... ])
.Desafortunadamente, de hecho, no hay campos UI para enlaces de menú por defecto en Drupal 8 como dijo @MatthieuScarset. Pero
menu_link_content
es una entidad de contenido en Drupal 8, por lo que es posible agregarle campos.Opción n. ° 1 Por supuesto, puede hacerlo mediante programación como sugirió @Decipher.
Opción # 2 Pero hay otra solución alternativa para habilitar los campos de la interfaz de usuario para los enlaces de menú temporales:
Drupal\menu_link_content\Entity\MenuLinkContent
field_ui_base_route = "entity.menu.add_link_form"
a la anotación/admin/structure/menu/manage/main/add/fields
drush cex -y
).field_ui_base_route = "entity.menu.add_link_form"
de la anotación enDrupal\menu_link_content\Entity\MenuLinkContent
fuente
Puede usar el menú colosal para agregar el campo en lugar del módulo del menú principal.
fuente
"Elementos adicionales del menú" es una forma de lograr esto, como sugirió @Mykhailo Gurei.
Pero en mi caso tuve que agregar campos adicionales y usar el módulo de menú Mega. Estaba usando "We mega menu" y con él "Menu item extras" no funciona. Simplemente el menú no se muestra en el front-end (algunos problemas de anulación de plantillas).
Entonces, otra opción que funciona con "We mega menu" es "Campos de contenido del elemento de menú":
https://www.drupal.org/project/menu_item_fields
Tiene la misma funcionalidad y no tiene conflicto con We mega menu module.
fuente
Desafortunadamente, los desarrolladores principales de Drupal 8 no han hecho que los enlaces del menú sean confiables. Por lo tanto, no es posible agregar campos a los enlaces del menú por ahora.
El creador de sitios "evita" es crear un vocabulario personalizado que puede tener campos personalizados.
fuente