TYPO3: Menü mit eigenen Klassen vor und nach dem aktiven Menüpunkt

TYPO3In TYPO3-Systemen werden Menüs in der Regel durch TypoScript-Objekte automatisch generiert. Dabei können eigene CSS-Klassen für die “inaktiven”, die “aktiven”, für Menüpunkte mit Unterseiten oder die jeweils ersten oder letzten Punkte konfiguriert werden. Mittels OptionSplit können sogar relativ komplex alterierende Klassen-Konstrukte erzeugt werden. Die Möglichkeit aber, die Menüpunkte vor und nach dem jeweils aktiven Punkt mit eigenen CSS-Klassen auszustatten, bedarf schon etwas trickreicheren Handelns.

Das folgende kleine Snippet zeigt, wie es geht:

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
lib.menu = HMENU
lib.menu {
  entryLevel = 1
  1 = TMENU
  1 {
    wrap = <ul>|</ul>
    NO {
      allWrap.cObject = CASE
      allWrap.cObject {
        key.data = register:CURRENT
        default = TEXT
        default.value = <li class="first before_act"> | </li> |*| <li class="before_act"> | </li> |*| <li class="last before_act"> | </li>
        1 = TEXT
        1.value = <li class="first after_act"> | </li> |*| <li class="after_act"> | </li> |*| <li class="last after_act"> | </li>
      }
      stdWrap.htmlSpecialChars = 1
    }
    ACT = 1
    ACT {
      allWrap = <li class="first act">|</li> |*| <li class="act">|</li> |*| <li class="last act">|</li>
      stdWrap.htmlSpecialChars = 1
      after.cObject = LOAD_REGISTER
      after.cObject {
        CURRENT = 1
      }
    }
  }
}

Zur Erläuterung:
Der Trick liegt in der Verwendung des TypoScript-Objektes REGISTER. Im aktiven Zustand des Menupunktes wird ein Registerwert CURRENT gesetzt, der dann in den inaktiven Menuzuständen abgefragt werden kann. Durch diesen “Merker” im Register ist zu jedem Zeitpunkt klar, ob der aktive Menüpunkt schon gerendert wurde, und für alle nachfolgenden kann entsprechend reagiert werden. Dies geschieht mittels des CASE-Objektes im NO-Zustand des Menus.
Auf diese Weise erhält man für jeden Menüpunkt vor dem aktiven die Klasse “before_act”, für jeden danach die Klasse “after_act”, für den aktiven die Klasse “act” und für den jeweils ersten und letzten Menüpunkt zusätzlich noch die Klasse “first”, bzw. “last”.

2 Gedanken zu „TYPO3: Menü mit eigenen Klassen vor und nach dem aktiven Menüpunkt

  1. M

    Hallo,
    das Menü ist soweit super, denn mein Menü ist grundsätzlich auch so aufgebaut, nur dass bei mir der Vorgänger NUR vor dem aktiven Menüpunkt erscheinen soll.

    Könnte ich dazu einen Lösungsvorschlag bekommen?

    Vielen Dank.

    Antworten
  2. MN

    Moin,
    erziehlt bei mir leider nicht den gewünschten Effekt:

    MENUE_OBEN = HMENU
    MENUE_OBEN {
    special = directory
    special.value = 2
    1 = TMENU
    1 {
    wrap = |
    noBlur = 1
    NO {
    allWrap.cObject = CASE
    allWrap.cObject {
    key.data = register:CURRENT
    default = TEXT
    default.value = | |*| | |*| |
    1 = TEXT
    1.value = | |*| | |*| |
    }
    stdWrap.htmlSpecialChars = 1
    #linkWrap = | |*| | |*| |
    }
    ACT = 1
    ACT {
    #linkWrap = | |*| | |*| |
    allWrap = | |*| | |*| |
    stdWrap.htmlSpecialChars = 1
    after.cObject = LOAD_REGISTER
    after.cObject {
    CURRENT = 1
    }
    }
    CUR = 1
    CUR {
    linkWrap = | |*| | |*| |
    }
    IFSUB = 1
    IFSUB {
    linkWrap = | |*| | |*| |
    }
    }
    } # NAVI_TOP

    } # 20.marks
    } # page

    Die Klassen um den aktiven Punkt herum werden alle mit before_act versehen.

    Weißt du zufällig, woran das liegen könnte?

    Danke.

    Antworten

Schreibe einen Kommentar

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