Zum Inhalt springen

Menügestaltung unabhängig von Ebene

Erstellt am 27. Januar 2012 · 11 Antworten · letzte Antwort am 29. Januar 2012

Tags: Frage

corona ·

Hallo zusammen,

es ist schwierig zu beschreiben, was ich möchte.
Und zwar habe in meiner Webseite ein Topmenü und ein Leftmenü.
Das Topmenü ist ein Megadropdown und das Seitenmenü ergänzt dieses.

Ich habe also zB folgende Webseitenstruktur:
1. Ebene - 2. Ebene - 3.Ebene
* Home
* Sport - Abteilung A - Volleyball
* Sport - Abteilung B - Turnen
* Sport - Abteilung B - Tanzen

Jetzt ist es so, dass im Seitenmenü 2 Ebenen angezeigt werden. Jeweils anders dargestellt.

Also ab der 2. Ebene
Wenn zB Sport gewählt ist, dann wird im Leftmenü gezeigt:
Abteilung A
- Volleyball
Abteilung B
- Turnen
- Tanzen

Wenn ich Jetzt zum Beispiel Volleyball wähle, sieht das Menü genauso aus.

Was ich allerdings erreichen will, ist, dass Volleyball dann der oberste Eintrag im linken Menü wäre. Ich weiß leider nicht, wie ich es besser beschreiben soll.
Das Menü sollte dann aussehen:
Volleyball

Wenn ich Tanzen wähle, soll es wie folgt aussehen:
Turnen
Tanzen

Mit anderen Worten. Immer die Ebene, die gewählt ist, soll die höchste sein. Wie kann ich das erreichen?

DAnke für jede Hilfe

TS meines Menüs:

menu.left = COA
menu.left {  
  	15 = HMENU
  	15{
    		entryLevel = 1
   	 	wrap = <div class="menu_left">|</div>
    		1 = TMENU
    		1{
      			wrap = <div class="menu_left_menu" ><ul id='menuList'>|</ul></div>
      			noBlur =1
      			ACT=1
      			ACTIFSUB = 1
   
      			NO{
       				wrapItemAndSub = <li class='menuItem'>|</li>
        			ATagParams = class='menuLink'
        		
      			} 
 	     		ACT{
        			wrapItemAndSub = <li class='menuItem'>|</li>
        			ATagParams = class='menuLinkAct'
     	 		}
      			ACTIFSUB{
        			wrapItemAndSub = <li class='menuItem'>|</li>
        			ATagParams = class='menuLinkAct'
      			}
   	 	}
    		2 = TMENU
    		2{
      			noBlur = 1
	      		ACT = 1
      			ACTIFSUB = 1
      			wrap = <ul class='submenuList'>|</ul>
	      		NO{
        			wrapItemAndSub = <li class='submenuItem'>|</li>
        			ATagParams = class='submenuLink'
     			}
  	    		ACT{
        			wrapItemAndSub = <li class='submenuItem'>|</li>
        			ATagParams = class='submenuLinkAct'
      			}
      			ACTIFSUB{
        			wrapItemAndSub = <li class='submenuItem'>|</li>
        			ATagParams = class='submenuLinkAct'
      			}
    		}
	}
}
hwt ·

Hallo,

da gibt es mehrere Möglichkeiten.

Du könntest z.B. den aktuellen Menüpunkt per CSS oben positionieren.

Alternativ könntest du das Menü auch per Typoscript aus einem Typolink auf die aktuelle Seite + Menü exklusive des aktuellen Menüpunktes aufbauen.

corona ·

Das entryLevel=-1 funktioniert nicht so ganz.

Wenn ich zB auf Tanzen klicke, dann geht das Menü komplett weg und es bleibt nicht nur Tanzen und Turnen stehen.
Es soll möglich sein, dass dann auch zu einem anderen Menüpunkt dieser Ebene gesprungen werden kann in dem Menü.

Ich verstehe nur Bahnhof, was hwt geschrieben hat. Kann ich ein Beispiel kriegen?

hwt ·

Hallo,

entryLevel legt ja auch die Einstiegsebene fest. Die betroffenen Seiten liegen ja aber auf der gleichen Ebene.

Also eine Variante ist, dem aktuellen Menüpunkt CSS-Styles zu geben, die ihn über den anderen positionieren.

Eine andere wäre es die aktuelle Seite als Typolink vor dem Menü einzufügen nach folgendem Muster:

menu.left = COA
menu.left {  
          10 = TEXT
          10.value = ...
          10.typolink ....

          15 = HMENU
          15 {
             ....
          }

Dabei solltest du aber beachten, dass du dein div und ul an den entsprechenden Stellen wrapst und natürlich noch den aktuellen Menüpunkt an seiner Originaloosition mit CSS ausblendest.

LuP ·

Hallo,

wie wäre es, die Rootline zusätzlich zu checken. An Deinem menu.left nichts verändern, nur noch folgendes einfach dranhängen:

[treeLevel = 2]
menu.left.15.entryLevel = -1
[end]
[treeLevel = 3]
menu.left.15.entryLevel = -2
[end]

VG,
LuP

hwt ·

Hallo LuP,

wie soll das denn bitte den aktuellen Menüpunkt der dritten Ebene über die anderen der dritten Ebene setzen?

"entryLevel" gibt doch nur an, ab welcher Tiefe das Submenü dargestellt wird.

Gruß!

igorshmigor ·

hwt, wenn Du die Eingangsfrage nochmal liest wirst Du vielleicht feststellen, dass es genau darum geht. Er will nicht die Reihenfolge der Darstellung ändern, sondern die Einstiegsebene festlegen.
Ich denke es sollte so gehen, wie LuP geschrieben hat.

hwt ·

Oha, ja. Sorry!!

Hatte das mehrfach gelesen aber trotzdem ganz anders verstanden. Ja vor dem Hintergrund habt ihr natürlich recht.

Gruß!

LuP ·

entryLevel definiert, ab welchem Level in der Rootline das Menü starten soll.

Mit entryLevel = 0 werden Menüs der ersten Ebene gerendert.
Mit entryLevel = 1 werden Menüs der zweiten Ebene gerendert.
Bei negativem Wert wird das entryLevel von hinten an in der Rootline gewählt.

corona schrieb

Wenn ich Jetzt zum Beispiel Volleyball wähle, sieht das Menü genauso aus.

Gewählt ist hier die 3. Ebene, gerendert wird aber Menüs der 2. Ebene [entryLevel=1]. Wenn wie im vorliegenden Fall gewünscht, nur Menüs auf derselben Ebene gerendert werden soll und die 3. Ebene die äußerte wäre, müsste nach meiner Logik, wenn [entryLevel=-1] das äußerte Level angibt, das entryLevel in der Rootline rückwärts um eine Ebene runter [entryLevel=-2], dann wäre man am Ziel.

VG,
LuP

etux ·

Im Grunde würde es auch so schon reichen, statt „entryLevel“:

special = list
special.value.data = page:uid

Das gilt dann allerdings für alle Menüebenen. Mit „treeLevel“ (wie im Beitrag davor) kann aber geholfen werden.

Man könnte aber auch ein ganz „normales“ Menü bauen und nur die gewünschte Ebene anzeigen lassen. Als Beispiel die dritte Ebene. Wenn nicht nur die aktive Elemente angezeigt werden sollen, nimmt man „doNotShowLink“ wieder raus und formatiert den NO-Zustand wie üblich.

menu.left = COA
menu.left {
  15 = HMENU
  15 {
    1 = TMENU
    1.NO.doNotShowLink = 1
    2 < .1
    3 < .1
    3 {
      noBlur = 1
      wrap = <ul>|</ul>
      ACT = 1
      ACT {
        wrapItemAndSub = <li>|</li>
      }
    }
  }
}

Andere Lösungswege gibt es sicher auch

.