Zum Inhalt springen

Typoscript- Fehler im Menü

Erstellt am 11. Juni 2012 · 6 Antworten · letzte Antwort am 15. Juni 2012

Tags: Frage

brainwatcher ·

Habe ein Menü, dass auch funktioniert hat. Es wurde jedoch nötig, bei geschützten Seiten eine Extra-Klasse mitzugeben. Mir ist nicht ganz klar warum, aber der unten gekennzeichnete Code überschreibt scheinbar meine Klassen für active- und current Zustände.

Kann hier wer helfen? (Sehe den Fehler einfach nicht.)

temp.MENU_LINKS = HMENU
temp.MENU_LINKS.special.value = 60
temp.MENU_LINKS.entryLevel = 1
# IF-Condition Trunk – Navigationsebene
[PIDupinRootline  = 5] || [globalVar = TSFE:id=5]
temp.MENU_LINKS.special.value = 5
temp.MENU_LINKS.entryLevel = >
[end]
[PIDupinRootline  = 11] || [globalVar = TSFE:id=11]
temp.MENU_LINKS.special.value = 11
temp.MENU_LINKS.entryLevel = >
[end]
[PIDupinRootline  = 13] || [globalVar = TSFE:id=13]
temp.MENU_LINKS.special.value = 13
temp.MENU_LINKS.entryLevel = >
[end]
[PIDupinRootline  = 9] || [globalVar = TSFE:id=9]
temp.MENU_LINKS.special.value = 9
temp.MENU_LINKS.entryLevel = >
[end]
[PIDupinRootline  = 17] || [globalVar = TSFE:id=17]
temp.MENU_LINKS.special.value = 17
temp.MENU_LINKS.entryLevel = >
[global]


 
temp.MENU_LINKS { 
  special = directory
  1 = TMENU 
  1 { 
    showAccessRestrictedPages = NONE
    showAccessRestrictedPages.addParams = &redirect_url=###RETURN_URL###
    expAll = 0 
    noBlur = 1 
    wrap = <ul> | </ul> 
    
    NO = 1 
 
    
## Bereitet Probleme!!!!
  NO.ATagParams.if {
     value=0
     isGreaterThan.field = fe_group
  }    
  NO.ATagParams = class="rzcolorbox-content36"
   
  
  IFSUB = 1
  IFSUB.ATagParams.if {
     value=0
     isGreaterThan.field = fe_group
  }
  IFSUB.ATagParams = class="rzcolorbox-content36"
    
    

  IFSUB = 1
  IFSUB.wrapItemAndSub = <li class="menuparent">|</li>
  ACTIFSUB < .IFSUB  
## Bis hier
    
    NO.wrapItemAndSub = <li class="l-1">|</li> 
    NO.stdWrap = upper 
    NO.ATagTitle.field = subtitle // title 
    NO.stdWrap.htmlSpecialChars = 1
    
    ACT = 1 
    ACT < .NO 
    ACT.wrapItemAndSub = <li class="l-1 active">|</li>
    ACT.ATagParams = class="active"
  
    CUR = 1
    CUR < .NO
    CUR.wrapItemAndSub = <li class="l-1 current">|</li>
    CUR.ATagParams = class="current"
  } 
  2 < .1
  2 {
    NO.wrapItemAndSub = <li class="l-2">|</li>
    ACT = 2 
    ACT < .NO 
    ACT.ATagParams = class="active"
  
    CUR = 2
    CUR < .NO
    CUR.ATagParams = class="current"
  }
  3 < .1 
  3 {
    NO.wrapItemAndSub = <li class="l-3">|</li>
    ACT = 3 
    ACT < .NO 
    ACT.ATagParams = class="active"
  
    CUR = 3
    CUR < .NO
    CUR.ATagParams = class="current"   
  }  
  4 < .1 
  4 {
    NO.wrapItemAndSub = <li class="l-4">|</li>
    ACT = 4 
    ACT < .NO 
    ACT.ATagParams = class="active"
  
    CUR = 4
    CUR < .NO
    CUR.ATagParams = class="current" 
  } 
} # end menu

lib.field_mainnav < temp.MENU_LINKS

Vielen Dank im Voraus.

Julian.​Hofmann ·

Hallo.

Etwas versteckt, aber doch logisch, warum es so ist:
Ich nehme mal die erste Ebene und dort nur ACT

Von Dir angegeben als:

    ACT = 1 
    ACT < .NO 
    ACT.wrapItemAndSub = <li class="l-1 active">|</li>
    ACT.ATagParams = class="active"

Mit aufgelöstem "ACT < .NO" (ohne den Problemabschnitt):

    ACT = 1 
    ACT.stdWrap = upper 
    ACT.ATagTitle.field = subtitle // title 
    ACT.stdWrap.htmlSpecialChars = 1
    ACT.wrapItemAndSub = <li class="l-1 active">|</li>
    ACT.ATagParams = class="active"

Mit aufgelöstem "ACT < .NO" (mit Problemabschnitt):

    ACT = 1 
    ACT.stdWrap = upper 
    ACT.ATagTitle.field = subtitle // title 
    ACT.stdWrap.htmlSpecialChars = 1

    ACT.ATagParams.if {
        value=0
        isGreaterThan.field = fe_group
    }    
    ACT.ATagParams = class="rzcolorbox-content36"

    ACT.wrapItemAndSub = <li class="l-1 active">|</li>
    ACT.ATagParams = class="active"

Der Wert von ATagParams, der für geschütze Seiten existieren soll, dürfte für ACT überschrieben sein, da nach dem Kopieren von NO auf ACT ATagParams = class="active" gesetzt wird. Was jedoch vond er Ausnahmebehandlung bleibt, ist der if-Abschnitt. Somit mit ATagParams nur berücksichtigt, wenn der if-Abschnitt wahr ist. D.h. es dürfte ein 'class="active"' da sein bei geschützten Seiten, und gar keine Klasse bei normalen Seiten.

Was hier vermutlich gewünscht ist, ist ein override.if... D.h. es soll ATagParams überschrieben werden mit etwas anderem, falls eine Bedingung zutrifft.

So oder so hast Du aber durch das herumkopieren noch das Problem, dass Du nirgend Deine Sonderfall-CSS-Klasse kombiniert mit "active" eingebaut hast.

Hoffe, ich konnte es halbwegs erklären...

Viele Grüße
julian

brainwatcher ·

Danke für die super Erklärung, Julian.
Soweit hatte ich nicht gedacht #angry#

Das Menü war schon fertig, musste es aber nachträglich aufbohren.

Für die 1. Ebene hab ich es geschafft, hänge allerdings noch an der 2. Ebene.

temp.MENU_LINKS { 
  special = directory
  1 = TMENU 
  1 { 
    showAccessRestrictedPages = NONE
    showAccessRestrictedPages.addParams = &redirect_url=###RETURN_URL###
    expAll = 0 
    noBlur = 1 
    wrap = <ul> | </ul> 
    
    NO = 1 
 
    
#  IFSUB = 1
#  IFSUB.ATagParams.override.if {
#     value=0
#     isGreaterThan.field = fe_group
#  }
#  IFSUB.ATagParams = class="rzcolorbox-content36"
#    
#  IFSUB = 1
#  IFSUB.wrapItemAndSub = <li class="l-1">|</li>
#    #IFSUB.wrapItemAndSub = <li class="menuparent">|</li>
#  ACTIFSUB < .IFSUB  
    
  
    NO.wrapItemAndSub = <li class="l-1">|</li> 
    NO.stdWrap = upper 
    NO.ATagTitle.field = subtitle // title 
    NO.stdWrap.htmlSpecialChars = 1
    NO.ATagParams.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    NO.ATagParams = class="x rzcolorbox-content36"    
    
    
    ACT = 1 
    #ACT < .NO 
    ACT.wrapItemAndSub = <li class="l-1 active">|</li>
    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams = class=" active rzcolorbox-content36"
    
  
    CUR = 1
    #CUR < .NO
    CUR.wrapItemAndSub = <li class="l-1 current">|</li>
    CUR.ATagParams = class="current"
    CUR.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    CUR.ATagParams = class="current rzcolorbox-content36"    
    
  } 
  2 < .1
  2 {
    NO.wrapItemAndSub = <li class="l-2">|</li>
    NO.ATagParams = class="xxxxx"
    
    ACT = 2 
    ACT < .NO 
    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams = class=" active rzcolorbox-content36"    
    
  
    CUR = 2
    CUR < .NO
    CUR.override.ATagParams = class="current"
    CUR.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    CUR.ATagParams = class="current rzcolorbox-content36" 
    
    
  }

Hast du hier noch eine Idee?

brainwatcher ·

Danke für die super Erklärung, Julian.
Soweit hatte ich nicht gedacht #angry#

Das Menü war schon fertig, musste es aber nachträglich aufbohren.

Für die 1. Ebene hab ich es geschafft, hänge allerdings noch an der 2. Ebene.

temp.MENU_LINKS { 
  special = directory
  1 = TMENU 
  1 { 
    showAccessRestrictedPages = NONE
    showAccessRestrictedPages.addParams = &redirect_url=###RETURN_URL###
    expAll = 0 
    noBlur = 1 
    wrap = <ul> | </ul> 
    
    NO = 1 
 
    
#  IFSUB = 1
#  IFSUB.ATagParams.override.if {
#     value=0
#     isGreaterThan.field = fe_group
#  }
#  IFSUB.ATagParams = class="rzcolorbox-content36"
#    
#  IFSUB = 1
#  IFSUB.wrapItemAndSub = <li class="l-1">|</li>
#    #IFSUB.wrapItemAndSub = <li class="menuparent">|</li>
#  ACTIFSUB < .IFSUB  
    
  
    NO.wrapItemAndSub = <li class="l-1">|</li> 
    NO.stdWrap = upper 
    NO.ATagTitle.field = subtitle // title 
    NO.stdWrap.htmlSpecialChars = 1
    NO.ATagParams.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    NO.ATagParams = class="x rzcolorbox-content36"    
    
    
    ACT = 1 
    #ACT < .NO 
    ACT.wrapItemAndSub = <li class="l-1 active">|</li>
    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams = class=" active rzcolorbox-content36"
    
  
    CUR = 1
    #CUR < .NO
    CUR.wrapItemAndSub = <li class="l-1 current">|</li>
    CUR.ATagParams = class="current"
    CUR.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    CUR.ATagParams = class="current rzcolorbox-content36"    
    
  } 
  2 < .1
  2 {
    NO.wrapItemAndSub = <li class="l-2">|</li>
    NO.ATagParams = class="xxxxx"
    
    ACT = 2 
    ACT < .NO 
    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams = class=" active rzcolorbox-content36"    
    
  
    CUR = 2
    CUR < .NO
    CUR.override.ATagParams = class="current"
    CUR.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    CUR.ATagParams = class="current rzcolorbox-content36" 
    
    
  }

Hast du hier noch eine Idee?

Julian.​Hofmann ·

Bei der zweiten Ebene vermute ich auch irgendwelche übersehenen Auswirkungen der Kopie "2 < .1". Überprüf das mal, dass wirklich nur das in die 2. Ebene kommt, was da auch hin soll.
Hierfür ist der "Template Object Browser" im BE-Modul "Template" ggf.a uch hilfreich.

Was override angeht, hast Du noch paar Fehler drin:
1. CUR.override.ATagParams = class="current" dürfte nicht (wie gewollt) greifen.
2. if + override

    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams = class=" active rzcolorbox-content36"

Hier überschreibt (unabhängig vom if) die letzte Zeile die erste. Da fehlt das override. Also von der Bedeutung her:
- Setze den Wert
- überschreibe den Wert
- ...aber nur wenn die Bedingung gilt
Richtig müsste es sein:

    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams[b].override[/b] = class=" active rzcolorbox-content36"
brainwatcher ·

Danke :-)

So langsam verstehe ich die Syntax von .if.
Wäre mir aus der Doku nicht so schnell klar geworden.

Und ich verstehe die Syntax von TS und den Aufbau jetzt besser... War zu sehr davon ausgegangen, dass es sich um Code handelt und habe nicht beachtet, dass es ja nur ein Array ist.

Einen Fehler habe ich allerdings noch drin, kann mir aber keinen Reim machen wie das zusammen hängt:

1. Ebene
2. Ebene
3. Ebene

Komme ich auf die Seite, alles richtig. Die Seite ist nicht geschützt.
Klicke ich auf Ebene 1 bekommt diese anschließend die rzcolorbox-Klasse.
Diese soll aber nur dann erscheinen, wenn die Seite wirklich geschützt ist.

Das Projekt ist noch geschützt, würde also ungern die URL veröffentlichen, könnte diese dir aber mal per PN schicken wenn du dazu bereit wärst ;-).

Der Code:

temp.MENU_LINKS { 
  special = directory
  1 = TMENU 
  1 { 
    showAccessRestrictedPages = NONE
    showAccessRestrictedPages.addParams = &redirect_url=###RETURN_URL###
    expAll = 0 
    noBlur = 1 
    wrap = <ul> | </ul> 
    
    NO = 1  
    NO.wrapItemAndSub = <li class="l-1">|</li> 
    NO.stdWrap = upper 
    NO.ATagTitle.field = subtitle // title 
    NO.stdWrap.htmlSpecialChars = 1
    NO.ATagParams = class="L1"
    NO.ATagParams.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    NO.ATagParams = class="rzcolorbox-content36"    
    
    
    ACT = 1 
    ACT.wrapItemAndSub = <li class="l-1 active">|</li>
    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams = class=" active rzcolorbox-content36"
    
  
    CUR = 1
    CUR.wrapItemAndSub = <li class="l-1 current">|</li>
    CUR.ATagParams = class="current"
    CUR.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    CUR.ATagParams = class="current rzcolorbox-content36"    
    
  } 
  2 = TMENU  
  2 {
    showAccessRestrictedPages = NONE
    showAccessRestrictedPages.addParams = &redirect_url=###RETURN_URL###
    expAll = 0 
    noBlur = 1 
    wrap = <ul> | </ul>    

    NO.wrapItemAndSub = <li class="l-2">|</li>
    NO.ATagParams.override = class="xxxxx"
    NO.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    NO.ATagParams.override = class="rzcolorbox-content36"    
 
    
    
    ACT = 2 
    ACT.wrapItemAndSub = <li class="active l-2">|</li>
    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams.override = class=" active rzcolorbox-content36"  
   
  
    CUR = 2
    CUR.wrapItemAndSub = <li class="current l-2">|</li>
    CUR.ATagParams = class="current" 
    CUR.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    CUR.ATagParams.override = class="current rzcolorbox-content36"   
    
  }
  3 = TMENU
  3 {
    showAccessRestrictedPages = NONE
    showAccessRestrictedPages.addParams = &redirect_url=###RETURN_URL###
    expAll = 0 
    noBlur = 1 
    wrap = <ul> | </ul>    
    NO.wrapItemAndSub = <li class="l-3">|</li>
    NO.ATagParams = class="xxxxx"
    NO.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    NO.ATagParams.override = class="rzcolorbox-content36"    
        
    ACT = 3 
    ACT.wrapItemAndSub = <li class="active l-3">|</li>
    ACT.ATagParams = class="active"
    ACT.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    ACT.ATagParams.override = class=" active rzcolorbox-content36"  
    
  
    CUR = 3
    CUR.wrapItemAndSub = <li class="current l-3">|</li>
    CUR.ATagParams = class="current" 
    CUR.ATagParams.override.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    CUR.ATagParams.override = class="current rzcolorbox-content36"  
  }   
} # end menu

Vielen Dank

brainwatcher ·

Okay, solved.

Wer genau liest ist klar im Vorteil. Habe override bei Ebene 1 vergessen....

Muss heißen:

    NO = 1  
    NO.wrapItemAndSub = <li class="l-1">|</li>
    NO.ATagParams = class="clean"
    NO.stdWrap = upper 
    NO.ATagTitle.field = subtitle // title 
    NO.stdWrap.htmlSpecialChars = 1
    NO.ATagParams = class="L1"
    NO.ATagParams.if {
       value=0
       isGreaterThan.field = fe_group
    }    
    NO.ATagParams.override = class="rzcolorbox-content36"

Wie markiere ich hier denn als gelöst?