TYPO3: XHTML-valides Menü erzeugen

TYPO3Ein Riesenbonus von TYPO3 ist es, dass Menüs automatisch aus dem Seitenbaum erzeugt werden können. Dafür muss man ein wenig TypoScript schreiben und in das Seiten-Template einbinden.
Damit das Menü auch schön XHTML-valide wird, gilt es aber einige Kleinigkeiten zu beachten…

Unter anderem muss dabei auf die Verschachtelung von ul und li-Tags geachtet werden. des weiteren müssen alle HTML-Sonderzeichen (insbesondere &, <, > und “) in die entsprechenden Entitäten umgewandelt werden. Sonderzeichen wie Umlaute aber müssen erhalten bleiben, da die entsprechenden HTML-Entitäten (z.B. &auml;) nicht Teil der Standard XML-Definition sind.

Ein XHTML-valides Menü in Form einer HTML-Liste (<ul>) kann in etwa so erzeugt werden:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
lib.menu = HMENU
lib.menu {
  entryLevel = 0
  #
  # Menü in ul-Tags wrappen
  #
  stdWrap.wrap = <ul>|</ul>
  #
  # Aber nur, wenn auch Seiten da sind!
  #
  stdWrap.required = 1
  #
  # 1. Ebene
  #
  1 = TMENU
  1 {
    NO {
      #
      # Alles in li-Tags wrappen, inkl. der tieferen Ebenen
      #
      wrapItemAndSub = <li>|</li>
      #
      # HTML-Sonderzeichen in Entities umwandeln
      #
      stdWrap.htmlSpecialChars = 1
    }
    ACT = 1
    ACT {
      #
      # Alles in li-Tags wrappen, inkl. der tieferen Ebenen,
      # dabei für´s highlighten eine CSS-Klasse setzen
      #
      wrapItemAndSub = <li class="current">|</li>
      #
      # HTML-Sonderzeichen in Entities umwandeln
      #
      stdWrap.htmlSpecialChars = 1
      #
      # und auch der a-Tag bekommt eine Klasse
      #
      ATagParams = class="current"
    }
  }
  #
  # 2. Ebene ist eine Kopie der ersten...
  #
  2 < .1
  #
  # ...allerdings hier wieder in ul-Tags gewrappt
  #   
  2.wrap = <ul>|</ul>
  #
  # Der ganze Spaß für jede weitere Ebene...
  #
  3 < .2
 
  4 < .3
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.