Menús: navegación multilingüe con submenús anidados

AliothPress usa un solo árbol de menú para todos los idiomas. El menú se construye una vez y cada visitante lo ve resuelto en su idioma automáticamente: slugs correctos, etiquetas traducidas y ningún enlace a contenido no disponible. El menú de cabecera admite hasta 3 niveles (elemento → hijo → nieto). El menú del pie de página es plano a propósito. Los elementos del menú pueden ser páginas, entradas o enlaces personalizados (incluidas anclas y URL de archivos), cada uno con comportamiento por idioma. Los borradores y las traducciones ausentes se ocultan por idioma, nunca en todo el sitio.

Cómo funciona la resolución multilingüe

Una página o entrada se añade al menú eligiendo cualquiera de sus versiones de idioma. El motor enlaza el elemento del menú con el translation group del contenido, no con un idioma concreto.

Para cada visitante, cada elemento se resuelve de forma independiente:

Situación Qué ve el visitante
La traducción existe y está publicada El elemento, con el slug y el título de ese idioma
La versión de ese idioma es un borrador Elemento oculto solo en ese idioma
No hay traducción en ese idioma Elemento oculto solo en ese idioma
Un elemento padre está oculto Toda su rama (hijos y nietos) queda oculta
El idioma está desactivado en los ajustes Sus páginas devuelven 404. Los menús de los demás idiomas no se ven afectados

Dos consecuencias útiles:

  • No importa en qué idioma hiciste clic en el editor de menús. Añadir la versión alemana de una página produce el mismo elemento de menú que añadir la inglesa. Añadir ambas es seguro: los duplicados dentro del mismo nivel se fusionan automáticamente. El menú guarda referencias neutras respecto al idioma en lugar de páginas de un idioma concreto.
  • Publicar un borrador o reactivar un idioma restaura sus elementos de menú al instante. Nada necesita reconstruirse.

Anidamiento: tres niveles

El menú de cabecera admite tres niveles:

Elemento superior

├── Hijo

│   └── Nieto

└── Hijo

En el editor de menús:

  • Arrastra un elemento a la derecha (≥ 30 px) sobre otro para anidarlo como su hijo. Funciona con elementos superiores (crea un hijo) y con hijos (crea un nieto).
  • Arrastra a la izquierda para subir un elemento un nivel.
  • Los botones ⤵ / ⤴ hacen lo mismo sin arrastrar. El botón ⤵ se oculta cuando el anidamiento superaría los tres niveles.
  • Una rama siempre se mueve entera. Arrastrar, anidar, desanidar o eliminar un padre se lleva consigo todo su subárbol.
  • Un cuarto nivel no puede crearse: ni arrastrando, ni con botones, ni con peticiones fabricadas a mano. El servidor impone el mismo límite de forma independiente.

En el sitio público:

  • Escritorio: los hijos aparecen en un desplegable. Los nietos se abren en un flyout lateral (con soporte de teclado y atributos ARIA). Cerca del borde derecho de la pantalla, el flyout se abre hacia la izquierda automáticamente.
  • Móvil: la barra lateral muestra acordeones anidados: un toque en el padre despliega los hijos, un toque en un hijo con elementos despliega los nietos. Sin hover.

El tope de tres niveles forma parte del motor. Está diseñado para que futuros módulos oficiales, como una tienda con árboles de categorías profundos, puedan ampliarlo sin cambios en la lógica de menús.

Enlaces personalizados, anclas y archivos

La pestaña Enlaces añade elementos que no son páginas ni entradas:

  • URL y etiquetas por idioma. Ejemplo: /docs#getting-started con la etiqueta Docs para inglés, /dokumentation#erste-schritte con la etiqueta Doku para alemán. En un idioma sin URL configurada, el elemento se oculta.
  • Los enlaces de ancla siguen entendiendo de idiomas: el selector de idioma lleva /docs#getting-started a su equivalente alemán, en cualquier profundidad de anidamiento.
  • Las URL de archivos (p. ej. /press-kit.pdf) funcionan como elementos de menú, también como nietos, y admiten target="_blank".
  • Solo se aceptan URL https://, http://, mailto:, tel: y relativas con /. Las URL javascript:, data: y relativas al protocolo las rechazan el editor y, de forma independiente, el servidor.

Qué pasa cuando el contenido cambia

Acción Comportamiento del menú
Pasar una versión de idioma a borrador Elemento oculto en ese idioma. Los demás idiomas no cambian
Eliminar una versión de idioma El elemento se ancla de nuevo a una traducción publicada superviviente. Su submenú se conserva
Eliminar la última versión del contenido El elemento del menú y toda su rama se eliminan
Desactivar un idioma Los menús de los idiomas restantes siguen funcionando. Nada se borra
Reactivar el idioma Los elementos reaparecen en él con sus slugs y etiquetas originales

El editor de menús del panel sigue siendo funcional en todos estos estados: una cobertura de idiomas desigual entre elementos del menú es una configuración soportada y probada, no un error.

Preguntas frecuentes

¿Cuántos niveles de menú admite AliothPress?
Tres en el menú de cabecera: elementos superiores, hijos y nietos. El menú del pie de página es plano por diseño.
¿Tengo que construir un menú distinto para cada idioma?
No. Hay un solo árbol de menú. Cada versión de idioma del sitio lo resuelve automáticamente mediante los translation groups.
¿Y si una página del menú no tiene traducción en algún idioma?
El elemento simplemente se oculta en ese idioma. Si la página es un padre, sus hijos y nietos se ocultan con ella en ese idioma.
¿Los borradores aparecen alguna vez en los menús públicos?
No. Un borrador oculta la entrada de menú de su idioma, y el resolutor nunca enlaza a contenido sin publicar, ni siquiera cuando el borrador es exactamente la versión a la que estaba anclado el elemento.
¿Un elemento de submenú puede ser un enlace personalizado o un archivo?
Sí. Los enlaces personalizados, anclas y URL de archivos incluidos, pueden ser hijos o nietos, con URL y etiquetas por idioma.
¿Qué pasa con los elementos del submenú si elimino su página padre?
Si existe otra traducción publicada del padre, el elemento del menú se ancla de nuevo a ella y el submenú se conserva. Si era la última traducción, el elemento y toda su rama se eliminan del menú.
¿Por qué no puedo arrastrar un elemento más allá de tres niveles?
El tope de profundidad se impone en el editor (el control de anidamiento se desactiva solo) y de nuevo en el servidor, que además protege contra peticiones malformadas. Las estructuras más profundas se limitarían, nunca se perderían en silencio.
¿El menú móvil admite tres niveles?
Sí, como acordeones anidados en la barra lateral, que solo necesitan toques, sin hover. El escritorio usa un desplegable más un flyout lateral con soporte de teclado y lector de pantalla.