Menu Item Extras
Proporciona campos adicionales para elementos de menú utilizando la entidad Menu Link Content del núcleo de Drupal sin requerir entidades adicionales.
menu_item_extras
Install
composer require 'drupal/menu_item_extras:^3.1'
composer require 'drupal/menu_item_extras:^3.0'
Overview
Menu Item Extras extiende el sistema de menú del núcleo de Drupal permitiendo añadir campos personalizados a los elementos de menú. A diferencia de las soluciones de Mega Menu que dependen de entidades separadas, este módulo aprovecha la entidad Menu Link Content incorporada, tratando cada menú como un bundle. Este enfoque permite a los constructores de sitios añadir cualquier tipo de campo (texto, imagen, referencias a taxonomía, etc.) directamente a los elementos de menú a través de la interfaz estándar de Field UI.
El módulo introduce soporte de modos de vista por elemento, permitiendo diferentes configuraciones de visualización para enlaces de menú individuales. También proporciona sugerencias de plantillas mejoradas basadas en el nombre del menú, el nivel del menú y el modo de vista, dando a los desarrolladores de temas un control granular sobre el renderizado de elementos de menú.
Los aspectos técnicos clave incluyen la modificación automática del tipo de entidad donde los menús se convierten en bundles de entidades menu_link_content, un pseudo-campo "Children" para controlar la ubicación del submenú en la visualización, y un contexto de caché personalizado para el renderizado de menús con reconocimiento del rastro activo.
Features
- Permite campos personalizados en elementos de menú usando Field UI de Drupal (texto, imágenes, referencias a entidades, etc.)
- Selección de modo de vista por elemento permitiendo diferentes configuraciones de visualización para elementos de menú individuales
- Agrupación específica por menú donde cada menú actúa como un bundle para entidades menu_link_content
- Sugerencias de plantillas mejoradas basadas en nombre del menú, nivel del menú, modo de vista y ubicación de región
- Pseudo-campo Children para controlar el posicionamiento de elementos de submenú dentro de la visualización del elemento padre
- Integración con Views con plugin de argumento predeterminado personalizado para el ID del elemento de menú activo
- Soporte de comandos Drush para limpiar datos extra del menú
- Validación de desinstalación para prevenir datos huérfanos
- Contexto de caché con reconocimiento del rastro activo para renderizado optimizado de menús
- Manejo de exportación de configuración que añade automáticamente dependencias del módulo
Use Cases
Mega Menu con Contenido Enriquecido
Cree un mega menu añadiendo campos de imagen, texto del cuerpo y referencia de taxonomía a su menú de navegación principal. Use la función de modo de vista para mostrar diferente contenido en diferentes niveles de menú - por ejemplo, mostrar imágenes destacadas en elementos de primer nivel y descripciones de texto en elementos hijos.
Banners Promocionales por Elemento
Añada un campo de imagen de banner promocional a los elementos de menú. Use la configuración de modo de vista para mostrar el banner solo para elementos de menú específicos designados como destacados, mientras otros elementos se muestran normalmente.
Navegación Categorizada con Contenido Relacionado
Añada campos de referencia de entidad a elementos de menú apuntando a contenido o términos de taxonomía. Muestre productos relacionados, artículos o categorías directamente dentro del menú desplegable sin crear bloques de mega menu separados.
Estilizado de Menú Regional
Use las sugerencias de plantilla basadas en región (menu--extras--main--header.html.twig vs menu--extras--main--footer.html.twig) para mostrar el mismo menú de manera diferente en las regiones de cabecera versus pie de página.
Vistas Contextuales Basadas en Posición del Menú
Use el plugin de argumento predeterminado de Views para crear bloques que muestren contenido relacionado con el elemento de menú actualmente activo, habilitando barras laterales dinámicas o áreas de contenido que cambian según el contexto de navegación.
Tips
- Use el pseudo-campo 'Children' en Administrar visualización para controlar dónde aparecen los elementos de submenú en relación con los campos personalizados del elemento padre
- Cree modos de vista personalizados para la entidad menu_link_content para tener diferentes visualizaciones para elementos de menú destacados vs regulares
- Acceda a la entidad del elemento de menú en plantillas via {{ item.entity }} para mostrar condicionalmente basándose en valores de campo: {% if item.entity.field_featured.value == '1' %}
- Las sugerencias de plantilla incluyen el nivel de menú, permitiendo diferente marcado para navegación de primer nivel vs niveles más profundos: menu-link-content--main--menu-level-0--default.html.twig
- El módulo añade automáticamente contextos de caché apropiados, pero implementaciones personalizadas complejas pueden necesitar tener en cuenta el contexto de caché menu_item_extras_link_item_content_active_trails
Technical Details
Admin Pages 4
/admin/structure/menu/manage/{menu}
Formulario estándar de edición de menú mejorado con un botón 'Limpiar datos relacionados' que elimina todos los datos de campos extra (valores de view_mode) de los elementos de menú. Esto es útil antes de desinstalar el módulo o restablecer personalizaciones de menú.
/admin/structure/menu/manage/{menu}/view_modes_settings/default
Proporciona una interfaz tabular para asignar modos de vista a cada elemento de menú de forma masiva. Muestra todos los enlaces de menú en una estructura de árbol con un selector desplegable de modo de vista para cada elemento, permitiendo una configuración rápida sin editar elementos de menú individuales.
/admin/structure/menu/manage/{menu}/clear
Formulario de confirmación que aparece al hacer clic en 'Limpiar datos relacionados' en la página de edición del menú. Confirma la eliminación de datos extra (valores del campo view_mode) para todos los elementos del menú especificado.
/admin/modules/uninstall/extra_data/menu_item_extras
Ruta de acción administrativa accesible durante la desinstalación del módulo. Limpia todos los datos extra de todos los menús para permitir una desinstalación limpia del módulo.
Hooks 10
hook_entity_type_build
Modifica la entidad menu_link_content para usar menús como bundles y establece manejadores personalizados para datos de vistas, formularios y plantillas de enlaces.
hook_entity_base_field_info
Añade el campo base 'view_mode' a las entidades menu_link_content para la selección de modo de vista por elemento.
hook_theme
Define hooks de tema para las plantillas menu__extras, menu_link_content y menu_levels.
hook_preprocess_block
Modifica bloques de menú para usar el tema base 'menu' y pasa datos de región para sugerencias de plantilla.
hook_theme_suggestions_menu_link_content
Proporciona sugerencias de plantilla para contenido de enlaces de menú basadas en modo de vista, nombre del menú, nivel del menú e ID de entidad.
hook_theme_suggestions_menu_levels
Proporciona sugerencias de plantilla para niveles de menú basadas en nombre del menú y nivel.
hook_theme_suggestions_menu
Añade sugerencias para menús con campos extra incluyendo sugerencias basadas en región.
hook_preprocess_menu
Procesa árboles de menú para menús con campos extra, añadiendo contenido renderizado a cada elemento.
hook_entity_extra_field_info
Crea el pseudo-campo 'children' para controlar la posición del submenú en la visualización del elemento de menú.
hook_entity_view_alter
Oculta los campos predeterminados de enlace de menú (título, descripción, peso, expandido, habilitado) de la salida renderizada.
Drush Commands 1
drush menu-item-extras-clear-extra-data
Limpia los datos extra relacionados con el menú (valores del campo view_mode) para un menú específico o todos los menús.
Troubleshooting 5
Navegue a la página de edición de cualquier menú y haga clic en 'Limpiar datos relacionados', o use el enlace proporcionado en el mensaje de validación de desinstalación en /admin/modules/uninstall/extra_data/menu_item_extras. También puede usar Drush: drush mie:clear_data all
Asegúrese de haber añadido campos via Estructura > Menús > [Nombre del Menú] > Administrar campos. También verifique que los campos estén habilitados en 'Administrar visualización de formulario' para el bundle del menú.
Verifique la configuración de 'Administrar visualización' para el bundle del menú y asegúrese de que los campos no estén ocultos. También verifique que esté usando una plantilla que muestre {{ content }} o los valores de campo específicos.
Asegure la nomenclatura correcta de plantillas: menu--extras--[nombre-menu].html.twig para nivel de menú, menu-link-content--[nombre-menu]--[modo-vista].html.twig para elementos. Limpie cachés después de añadir plantillas.
Cuando un elemento de menú se mueve a un menú diferente, sus datos de campos personalizados se limpian (por diseño) ya que los campos son específicos del bundle. Reingrese los datos del campo después de mover.
Security Notes 3
- El módulo usa el sistema de permisos del núcleo de Drupal - el permiso 'administer menu' es requerido para todas las operaciones administrativas incluyendo limpieza de datos
- Los valores de campo deben escaparse apropiadamente cuando se usan en plantillas personalizadas usando el auto-escape de Twig o el filtro explícito |escape
- Al exponer campos de menú via REST o JSON:API, revise la configuración de acceso a campos ya que el módulo no proporciona soporte REST integrado