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
39,114 sites
185
drupal.org

Install

Drupal 11, 10 v3.1.0
composer require 'drupal/menu_item_extras:^3.1'
Drupal 9 v3.0.2
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
Editar Menú /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ú.

Administrar modos de vista /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.

Confirmación de limpieza de datos extra del menú /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.

Eliminar datos extra de elementos de menú /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
No se puede desinstalar el módulo - error sobre datos extra existentes

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

Los campos extra no aparecen en el formulario de edición del elemento de menú

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ú.

Los valores de campo no se muestran en la salida 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.

Las plantillas no se están aplicando

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.

Los cambios no aparecen después de mover un elemento de menú entre menús

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