Menüs: Mehrsprachige Navigation mit verschachtelten Untermenüs

AliothPress nutzt einen Menübaum für alle Sprachen. Das Menü wird einmal gebaut, und jeder Besucher sieht es automatisch in seiner Sprache aufgelöst: korrekte Slugs, übersetzte Labels, keine Links auf nicht verfügbare Inhalte. Das Header-Menü unterstützt bis zu 3 Ebenen (Eintrag → Kind → Enkel). Das Footer-Menü ist bewusst flach. Menüeinträge können Seiten, Beiträge oder eigene Links sein, Anker und Datei-URLs eingeschlossen, jeweils mit eigenem Verhalten pro Sprache. Entwürfe und fehlende Übersetzungen werden pro Sprache ausgeblendet, nie auf der ganzen Website.

Wie die mehrsprachige Auflösung funktioniert

Eine Seite oder ein Beitrag kommt ins Menü, indem du irgendeine ihrer Sprachversionen auswählst. Die Engine verknüpft den Menüeintrag mit der Translation Group des Inhalts, nicht mit einer einzelnen Sprache.

Für jeden Besucher wird jeder Eintrag unabhängig aufgelöst:

Situation Was der Besucher sieht
Übersetzung existiert und ist veröffentlicht Den Eintrag, mit Slug und Titel dieser Sprache
Die Version dieser Sprache ist ein Entwurf Eintrag nur in dieser Sprache ausgeblendet
Keine Übersetzung in dieser Sprache Eintrag nur in dieser Sprache ausgeblendet
Ein übergeordneter Eintrag ist ausgeblendet Sein ganzer Zweig (Kinder und Enkel) ist ausgeblendet
Die Sprache ist in den Einstellungen deaktiviert Ihre Seiten liefern 404. Menüs anderer Sprachen bleiben unberührt

Zwei nützliche Konsequenzen:

  • Es ist egal, in welcher Sprache du im Builder geklickt hast. Die deutsche Version einer Seite hinzuzufügen erzeugt denselben Menüeintrag wie die englische. Beide hinzuzufügen ist sicher: Duplikate auf derselben Ebene werden automatisch zusammengeführt. Das Menü speichert sprachneutrale Referenzen statt sprachgebundener Seiten.
  • Einen Entwurf zu veröffentlichen oder eine Sprache zu reaktivieren stellt ihre Menüeinträge sofort wieder her. Nichts muss neu gebaut werden.

Verschachtelung: drei Ebenen

Das Header-Menü unterstützt drei Stufen:

Eintrag

├── Kind

│   └── Enkel

└── Kind

Im Builder:

  • Einen Eintrag nach rechts (≥ 30 px) über einen anderen ziehen, um ihn als dessen Kind einzuhängen. Funktioniert bei Top-Einträgen (erzeugt ein Kind) und bei Kindern (erzeugt einen Enkel).
  • Nach links ziehen holt einen Eintrag eine Ebene nach oben.
  • Die Buttons ⤵ / ⤴ machen dasselbe ohne Ziehen. Der ⤵-Button blendet sich aus, wenn die Verschachtelung drei Ebenen überschreiten würde.
  • Ein Zweig bewegt sich immer als Ganzes. Ziehen, Einhängen, Aushängen oder Entfernen eines Elternteils nimmt seinen kompletten Teilbaum mit.
  • Eine vierte Ebene lässt sich nicht erzeugen: nicht per Drag, nicht per Button, nicht per handgebauter Anfrage. Der Server erzwingt dasselbe Limit unabhängig.

Auf der öffentlichen Website:

  • Desktop: Kinder erscheinen im Dropdown. Enkel öffnen sich in einem seitlichen Flyout (mit Tastatursteuerung und ARIA-Attributen). Nahe am rechten Bildschirmrand öffnet das Flyout automatisch nach links.
  • Mobil: Die Sidebar rendert verschachtelte Akkordeons: ein Tipp auf den Elternteil klappt die Kinder aus, ein Tipp auf ein Kind mit Einträgen die Enkel. Kein Hover nötig.

Die Drei-Ebenen-Grenze steckt in der Engine. Sie ist so angelegt, dass künftige offizielle Module, etwa ein Shop mit tiefen Kategoriebäumen, sie ohne Änderungen an der Menülogik erweitern können.

Eigene Links, Anker und Dateien

Der Tab Links fügt Einträge hinzu, die keine Seiten oder Beiträge sind:

  • URLs und Labels pro Sprache. Beispiel: /docs#getting-started mit Label Docs für Englisch, /dokumentation#erste-schritte mit Label Doku für Deutsch. In einer Sprache ohne hinterlegte URL wird der Eintrag ausgeblendet.
  • Ankerlinks wechseln die Sprache mit: Der Sprachumschalter bildet /docs#getting-started auf sein deutsches Gegenstück ab, in jeder Verschachtelungstiefe.
  • Datei-URLs (z. B. /press-kit.pdf) funktionieren als Menüeinträge, auch als Enkel, und unterstützen target="_blank".
  • Akzeptiert werden nur https://, http://, mailto:, tel: und relative /-URLs. javascript:-, data:- und protokollrelative URLs weisen der Builder und, unabhängig davon, der Server zurück.

Was bei Inhaltsänderungen passiert

Aktion Menüverhalten
Eine Sprachversion auf Entwurf setzen Eintrag in dieser Sprache ausgeblendet. Andere Sprachen unberührt
Eine Sprachversion löschen Der Eintrag verankert sich neu an einer verbliebenen veröffentlichten Übersetzung. Sein Untermenü bleibt erhalten
Die letzte Version des Inhalts löschen Der Menüeintrag und sein ganzer Zweig werden entfernt
Eine Sprache deaktivieren Menüs der übrigen Sprachen funktionieren weiter. Nichts wird gelöscht
Die Sprache reaktivieren Einträge erscheinen darin wieder, mit ihren ursprünglichen Slugs und Labels

Der Admin-Builder bleibt in jedem dieser Zustände voll funktionsfähig: Uneinheitliche Sprachabdeckung über Menüeinträge hinweg ist eine unterstützte, getestete Konfiguration, kein Fehler.

Häufig gestellte Fragen

Wie viele Menüebenen unterstützt AliothPress?
Drei im Header-Menü: Top-Einträge, Kinder und Enkel. Das Footer-Menü ist bewusst flach.
Muss ich für jede Sprache ein eigenes Menü bauen?
Nein. Es gibt einen Menübaum. Jede Sprachversion der Website löst ihn automatisch über Translation Groups auf.
Was passiert, wenn eine Seite im Menü keine Übersetzung für eine Sprache hat?
Der Eintrag wird in dieser Sprache einfach ausgeblendet. Ist die Seite ein Elternteil, werden ihre Kinder und Enkel in dieser Sprache mit ausgeblendet.
Erscheinen Entwürfe jemals in öffentlichen Menüs?
Nein. Ein Entwurf blendet den Menüeintrag seiner Sprache aus, und der Resolver verlinkt nie auf unveröffentlichte Inhalte, auch dann nicht, wenn der Entwurf genau die Version ist, an der der Eintrag verankert war.
Kann ein Untermenüeintrag ein eigener Link oder eine Datei sein?
Ja. Eigene Links, Anker und Datei-URLs eingeschlossen, können Kinder oder Enkel sein, mit URLs und Labels pro Sprache.
Was passiert mit Untermenüeinträgen, wenn ich ihre Elternseite lösche?
Existiert eine andere veröffentlichte Übersetzung des Elternteils, verankert sich der Menüeintrag daran neu, und das Untermenü bleibt erhalten. War es die letzte Übersetzung, werden der Eintrag und sein ganzer Zweig entfernt.
Warum kann ich einen Eintrag nicht tiefer als drei Ebenen ziehen?
Die Tiefengrenze wird im Builder erzwungen (das Verschachtelungs-Steuerelement deaktiviert sich) und noch einmal auf dem Server, der auch vor fehlerhaften Anfragen schützt. Tiefere Strukturen würden begrenzt, nie stillschweigend verworfen.
Unterstützt das mobile Menü drei Ebenen?
Ja, als verschachtelte Akkordeons in der Sidebar, die nur Tipps brauchen, kein Hover. Desktop nutzt ein Dropdown plus seitliches Flyout mit Tastatur- und Screenreader-Unterstützung.