Grundlegendes bei der Menüerstellung

Wie in Typoscript üblich und im Modul TypoScript schon angedeutet, wird die Funktionsweise von Typoscript-Objekten durch das Setzen von Eigenschaften beeinflusst. Für die Menügenerierung existieren naturgemäß auch solche Typoscript-Objekte, die vom Administrator bzw. Entwickler in den eigenen Templates zugewiesen und konfiguriert werden. Jeder Menütyp bringt die nötigen Funktionen mitsich und muss lediglich den eigenen Bedürfnissen angepasst werden.
Funktionen wie automatische Verlinkung zu den entsprechenden Seiten oder „Rollover“-Effekte werden von Typo3 selbst zur Verfügung gestellt.

Das grundlegende Objekt für die Menügenerierung ist HMENU. Dieser Name steht für „hierarchisches Menü“. Es bildet die Hierarchieebene des Seitenbaums ab und definiert die Eigenschaften des Menüs.

marks.NAVIGATION = HMENU
marks.NAVIGATION.1 = TMENU
marks.NAVIGATION.1.NO {
allWrap = |
beforeImg = fileadmin/pfeilgrau.gif
beforeROImg = fileadmin/pfeilgruen.gif
RO = 1
}
marks.NAVIGATION.1.ACT = 1
marks.NAVIGATION.1.ACT {
allWrap = |
beforeImg = fileadmin/pfeilrot.gif
}
marks.NAVIGATION.2 = TMENU
marks.NAVIGATION.2.NO {
allWrap = |
beforeROImg = fileadmin/pfeilgruen.gif
RO = 1
}
marks.NAVIGATION.2.ACT = 1
marks.NAVIGATION.2.ACT {
allWrap = |
beforeImg = fileadmin/pfeilrot.gif
}

  • An der Position des Markers NAVIGATION in der Designvorlage wird das automatisch generierte Menü eingefügt.
  • marks.NAVIGATION.1 bezeichnet die erste Hierarchieebene des Objekts (also des Seitenbaums). Dies wird mit einem TMENU-Objekt belegt.
  • Nach der Zuweisung des TMENU-Objekts wird der Normalzustand NO des Menüs der ersten Ebene definiert.
  • allWrap sind die Zeichen, die jeden Menüeintrag umschließen. In diesem Fall wird um jeden Eintrag eine Tabellenzeile und Tabellenspalte gelegt. Befindet sich in der Designvorlage der Marker innerhalb eines Tabellen-Tags, dann wird ein Menü in Tabellenform aufgebaut.
  • Mit der Eigenschaft beforeImg und beforeROImg werden die Grafiken festgelegt, die vor dem Menütext angezeigt werden sollen. Die zweite Grafik wird erst angezeigt, wenn sich der Mauszeiger über dem Menüeintrag befindet, das so genannte „Rollover“.
  • Um das Rollover auch zu aktivieren, muss die Eigenschaft RO auf 1 gesetzt werden.
  • Die Definition der Eigenschaft marks.NAVIGATION.1.ACT ist für den aktiven Zustand des Menüs zuständig. Durch die Definition kann die Darstellung der aktuell ausgewählten Menüeinträge festgelegt werden.
  • Die beiden letzten Blöcke definieren den Normalzustand und den Zustand des aktuell ausgewählten Menüeintrags der zweiten Hierarchieebene (marks.NAVIGATION.2).
Wie bereits kurz angedeutet, existieren einige Menüzustände, die den Menüeinträgen mittels Typoscript zugewiesen werden können. Folgende fünf Zustände sind möglich:
  • NO steht für den Normalzustand eines Menüeintrags.
  • Der Rollover-Zustand RO beschreibt das Aussehen des Eintrags, wenn sich der Mauszeiger darüber befindet. Dieser Zustand kann bei Typo3 nur mit Grafiken generiert werden, d.h. bei Grafikmenüs und Grafiken vor Textmenüs. Rollover-Effekte für Texte müssen über Stylesheets („hover“) erzeugt werden.
  • Der Zustand ACT beschreibt den aktuellen Verlauf. Dabei handelt es sich um den Menüeintrag der aktuell ausgewählt ist und jene Einträge, die in der Hierarchie über ihm liegen.
  • CUR bezeichnet den Zustand der aktuellen Seite, im Gegensatz zu ACT jedoch nur die Seite selbst.
  • Der IFSUB-Zustand definiert das Aussehen eines Eintrags, wenn dieser mindestens eine Unterseite aufweist.

Das HMENU-Objekt weist folgende Eigenschaften auf, die näher spezifiziert werden können:

entryLevel
Diese Eigenschaft legt die Einstiegsebene des Menüobjekts fest. Dabei handelt es sich um die Ebene im Seitenbaum, ab der das Menü Einträge generiert. Beim Nicht-Setzen dieser Eigenschaft ist der Standardwert 0. Dies würde die Wurzel des Seitenbaums als Einstiegsebene festlegen. Als Menüeinträge werden die Seitentitel jener Seiten verwendet, die sich unterhalb der Wurzel befinden. Wird der Wert von entryLevel auf 1 gesetzt, werden alle Seiten der zweiten Ebene verwendet, die zum aktuell gewählten Menueintrag der ersten Ebenen gehören. Die Veränderung der Eigenschaft entryLevel macht vor allem bei unterschiedlichen Menüobjekten, die in der Designvorlage durch verschiedene Marker symbolisiert werden, Sinn.

special
Normalerweise bildet ein Menüobjekt die Hierarchie des Seitenbaums ab. Durch die Eigenschaft special kann dieses Verhalten jedoch geändert werden. special kann folgende Werte annehmen: directory, list, updated, rootline und keywords.

Mit directory kann ein Menü aufgebaut werden, dass nur aus bestimmten Seiten besteht. Folgendes Beispiel zeigt eine mögliche Anwendung:
marks.MENU_KURZ = HMENU 
marks.MENU_KURZ.special = directory
marks.MENU_KURZ.special.value = 10
marks.MENU_KURZ.1 = TMENU
marks.MENU_KURZ.1.NO {
before =
after = | |*| | |*|
}
Dieses Skript fügt an der Stelle des Markers MENU_KURZ, ein neues HMENU-Objekt, das aus der Seite mit der ID 10 und deren Unterseiten besteht. Es wird zu diesem Zweck ein Textmenü verwendet, das vor jedem Eintrag ein Leerzeichen setzt (Eigenschaft before). Die Zeile after gestaltet sich aufwendiger und stellt eine Besonderheit dar. In Typo3 wird dies OptionSplit genannt. Das Zeichen |*| trennt die einzelnen Optionen. Der Bereich vor dem ersten |*| betrifft den ersten Menüeintrag, der nächste Bereich gilt für alle mittleren Menüeinträge und der letzte gilt für den letzten Menüeintrag. In diesem Beispiel wird damit folgendes erreicht: Nach dem ersten Menüeintrag wird ein Leerzeichen und ein senkrechter Strich eingefügt, ebenso wird bei den mittleren Menüeinträgen verfahren.
Beim letzten Menüeintrag wird nur ein Leerzeichen ausgegeben. Das |-Zeichen stellt hier tatsächlich einen senkrechten Strich dar und ist kein Sonderzeichen wie bei der wrap-Eigenschaft.

Der Eigenschaft special.value kann nicht nur eine einzelne ID zugewiesen werden, sondern auch eine Liste von Seiten-IDs, die durch Beistriche getrennt sind, z.B. special.value = 10, 11 ,12. Das Menü besteht dann aus diesen Seiten und deren Unterseiten. Der Wert list ähnelt directory jedoch werden die Unterseiten bei list nicht miteinbezogen. Mit updated können Menüs der zuletzt geänderten Seiten automatisch erzeugt werden. Folgender Code soll dies verdeutlichen.
marks.AKTUELL.10 = HMENU
marks.AKTUELL.10.special = updated
marks.AKTUELL.10.special.value = 2, 3
marks.AKTUELL.10.special {
mode = tstamp
maxAge = 3600*24*3
limit = 5
}

An der Stelle des Markers AKTUELL wird ein Menü mit den zuletzt geänderten Seiten erzeugt. Die Eigenschaft special.value legt ähnlich wie bereits zuvor die Seiten fest, die verwendet werden soll. Darüber hinaus wird mit der mode-Eigenschaft festgelegt, wie das Alter der Seiten bestimmt wird. In dem Beispiel wird das Datenbankfeld tstamp der Content-Tabelle in der Datenbank verwendet. Das maximale Alter wird in der Eigenschaft maxAge in Sekunden spezifiziert. Die Anzahl der Einträge, die angezeigt werden soll, wird mit der Eigenschaft limit auf 5 begrenzt.

Der Wert rootline kann dafür verwendet werden, um klickbare Pfadanzeigen zu erzeugen. Die Typoscript-Anweisungen für ein solches Menü könnten wie folgt aussehen.
marks.PFAD = HMENU
marks.PFAD {
special = rootline
special.range = 0 | -1
1 = TMENU
1.NO.allWrap = | / |*| | /
|*| |
}

Der Marker PFAD wird durch eine klickbare Darstellung des momentanen Navigationspfades ersetzt. Mit der range-Eigenschaft kann bestimmt werden, welche Ebenen angezeigt werden. Im Beispiel beginnt der Pfad bei Level 0 (also beim Wurzelelement) und endet bei der aktuellen Seite (gekennzeichnet durch -1). In der allWrap-Eigenschaft wird wie im vorigen Beispiel ein OptionSplit verwendet. In diesem Beispiel handelt es sich bei dem |-Zeichen jedoch
tatsächlich um ein Sonderzeichen, da es in der allWrap-Eigenschaft verwendet wird.
Der Wert keyword wird verwendet, um Seiten in das Menü einzubinden, die bestimmte Schlüsselwörter enthalten.

minItems, maxItems
Mit minItems kann die Mindestzahl der Einträge bestimmt werden. Sind dafür nicht genügend Seiten vorhanden werden Dummy- Einträge erzeugt, die auf die aktuelle Seite verlinken. Mit maxItems wird die Maximalanzahl der Menüeinträge festgelegt. Sind mehr Seiten vorhanden, werden diese bei der Menüerzeugung ignoriert.
marks.MENU = HMENU
marks.MENU.minItems = 6
marks.MENU.maxItems = 6
marks.MENU.1 = TMENU
marks.MENU.1.wrap = |
marks.MENU.1.NO {
before =  
after =   | |*|   | |*|  
}

Im Beispiel wird ein vertikales Textmenü erzeugt, dass genau aus sechs Einträgen besteht. Mit der wrap-Eigenschaft des HMENU-Objekts wird festgelegt, dass das ganze Menü in einer Tabellenzelle untergebracht ist.

excludeUidList
Mit dieser Eigenschaft kann eine Liste von Seiten-IDs spezifiziert werden, die im Menü nicht erscheinen sollen.

begin
Diese Eigenschaft bestimmt, ab welchem Eintrag die Menüs angezeigt werden. Zum Beispiel begin=3 bewirkt, dass die ersten beiden Einträge nicht dargestellt werden.