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-startedmit Label Docs für Englisch,/dokumentation#erste-schrittemit 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-startedauf 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ützentarget="_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.