Menü-Tags nur anzeigen, wenn nicht leer

Ausgeben der umschließenden HTML-Tags eines Menüs, nur wenn dieses nicht leer ist

Anders ausgedrückt: Ausblenden bzw. Unterdrücken leerer DIV- oder UL-Tags eines TYPO3-Menüs, um W3C-konformen HTML-Code auszugeben.

Ausgangssituation

Sie haben ein horizontales Hauptmenü und ein weiteres Menü für die Unterpunkte zu einem Hauptmenüpunkt. Derartige zweigeteilte Menüs werden auf diesem Netzauftritt eingesetzt.

Problem

Das Untermenü soll nur angezeigt werden, wenn es nicht leer ist, d.h. keine Unterseiten bzw. keine Einträge vorhanden sind.

Hintergrund ist, dass durch den Standardwrap im HMENU-Element ein leeres Tag (z.B. UL-Tag) erzeugt wird. Dies führt gemäß W3C zu invaliden HTML-Code. Es sollen per TypoScript leere HTML-Tags unterdrückt werden.

Lösung

Die Unterdrückung der Ausgabe eines leeren DIV- oder UL-Tags für ein Menü ab der zweiten Ebene (Untermenü) sieht in TypoScript so aus:

[treeLevel = 0]
[else]
temp.umenue = HMENU
temp.umenue {
     entryLevel = 1
     1 = TMENU
     1.NO {
        linkWrap = |
        wrapItemAndSub = <li>|</li>
     }
     1.ACT.wrapItemAndSub = <li class="aktiv">|</li>
     1.ACT= 1
     2 < .1
     2.wrap = <ul>|</ul>
     2.ACT.wrapItemAndSub = <li class="aktiv">|</li>
}
lib.umenue < temp.umenue
lib.umenue.stdWrap {
  wrap = <ul>|</ul>
  required = 1
}
[end]

Erklärung

[treeLevel = 0] [else] erlaubt die Ausführung erst ab der 1. Untermenüebene. Zuvor wird nichts ausgegeben.

Das gewünschte Menü wird temporär ohne Standardwrap aufgebaut. Anschließend wird es der TemplaVoila-Variable lib.umenue zugewiesen.

required = 1 bewirkt, dass das LIB-Element nicht erzeugt wird, wenn es leer ist.

Sofern es erzeugt wird, kommt der Standardwrap zum Einsatz. Erst er schreibt UL-Tags um das Menü.

Das Ergebnis dieser Methode ist valider HTML-Code gemäß W3C.

Alternative

Wenn auf der Startseite nur Hauptmenüpunkte angezeigt werden, machen Untermenüpunkt noch keinen Sinn, da kein Hauptmenüpunkt gewählt wurde, zu dem Unterpunkte angezeigt werden können. Wenn jeder der Hauptmenüpunkte Unterpunkte hat genügt [treeLevel = 0] [else].

Im ELSE-Zweig kann ohne Umweg das LIB.SUCHE-Element erzeugt werden. Dieses enthält dann auch den Standardwrap um alle Unterpunkte. Diese einfache Variante wird beispielsweise auf diesem Netzauftritt verwendet.