2016-03-21 12 views
0

Ich baue ein Navigationsmenü mit TYPOscript, das mit Inhalten aus der Tabelle tt_content erweitert wird.Howto setzen einer CSS-Klasse in einem TYPOscript-Menü abhängig von Inhalt von tt_content

Jetzt versuche ich die CSS-Klasse des Elternelements (.drop-wrapp) zu ändern, wenn Inhalt von tt_content vorhanden ist und den Seitentitel von der übergeordneten Seite in zweiter Ebene (hier: "PAGE TITLE FIRST LEVEL ").

Das ist mein TypoScript so weit:

lib.navMain = COA 
lib.navMain { 

    10 = TEXT 
    10.wrap = | 
    10.value = {$const.lang.navi.skip} 
    10.typolink { 
    parameter.data = page:uid 
    parameter.dataWrap = |#skipMainNavi 
    ATagParams = class="sr-only sr-only-focusable" 
    } 

    20 = HMENU 
    20 { 
    special = directory 
    special.value = {$const.pid.home} 
    entryLevel = 0 

    1 = TMENU 
    1 { 
     wrap = <ul class="nav navbar-nav" role="menubar">|</ul> 

     expAll = 1 
     target = _top 
     noBlur = 1 

     wrap= <ul class="nav navbar-nav" role="menubar">|</ul> 

     NO { 
     wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li> 
     linkWrap = | 
     ATagParams = role="menuitem" 
     title = field:title 
     ATagTitle.field = subtitle // title 
     } 

     ACT < .NO 
     ACT = 1 
     ACT { 
     wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li> 
     ATagParams = class="mainmenuActive" 
     # linkWrap = <strong>|</strong> 
     } 
    } 

    2 < .1 
    2 { 
     wrap = <div class="drop-wrapp CLASS_IF_CONTENT_FROM_TT_CONTEN"><div class="drop-wrapp-inner">|</div></div> 


     20 = HMENU 
     20 { 
     special = directory 
     special.value.data = field:pid 

     1 = TMENU 
     1 { 
      expAll = 1 

      NO { 
      wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li> 
      linkWrap = | 
      ATagParams = role="menuitem" 
      title = field:title 
      ATagTitle.field = subtitle // title 
      } 

      ACT < .NO 
      ACT = 1 
      ACT { 
      wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li> 
      ATagParams = class="mainmenuActive" 
      # linkWrap = <strong>|</strong> 
      } 
     } 
     } 

     stdWrap.append = CONTENT 
     stdWrap.append { 
     table = tt_content 
     select { 
      pidInList.field = pid 
      where = colPos=1 AND deleted=0 AND hidden=0 
      orderBy = sorting 
      languageField = sys_language_uid 
      max = 2 
     } 

     stdWrap { 
      wrap = <div class="teaser-block"><div class="teaser-block-inner"><strong class="title">PAGE TITLE FIRST LEVEL</strong><div class="teaser-text">|</div></div></div> 

      // wrap only if there is content! 
      required = 1 
     } 
     } 

     stdWrap.innerWrap = <div class="drop-block"><ul class="list-unstyled nav-list" role="menubar">|</ul></div> 

    } 
    } 

    30 = TEXT 
    30.wrap = <a id="skipMainNavi" class="sr-only">|</a> 
    30.value = &nbsp; 
    30.htmlSpecialChars = 0 
} 

UPDATE:

Das ist sehr breafly was ich erreichen möchte:

<nav> 
 
    <ul> 
 
    <li><a href="#">Level 0.0</a></li> 
 
    <li> 
 
     <a href="#">Level 0.1</a> 
 
     
 
     <div class="drop-wrapp wide"><!-- only add class ".wide" if there is content from tt_content in "div.teaser-block" --> 
 
      <div class="drop-wrapp-inner"> 
 
      <div class="drop-block"> 
 
       <ul> 
 
       <li><a href="#">Level 1.0</a></li> 
 
       <li><a href="#">Level 1.1</a></li> 
 
       <li><a href="#">Level 1.2</a></li> 
 
       </ul> 
 
      </div> 
 
      <div class="teaser-block"> 
 
       Here is content from tt_content 
 
      </div> 
 
      </div> 
 
     </div> 
 
     
 
    </li> 
 
    <li><a href="#">Level 0.2</a></li> 
 
    </ul> 
 
</nav>

+0

Könnten Sie bitte so freundlich sein, den Code zu straffen, um ein minimales Beispiel zu erhalten? Dies würde helfen, Ihre Frage zu beantworten. Zuerst würde ich versuchen, so genannte REGISTER cObjects –

+0

Ich habe den HTML-Code in meiner Frage hinzugefügt. In der Zwischenzeit habe ich eine funktionierende Lösung für mich gefunden (siehe Antwort). Nicht sexy, aber funktionierend. Vielleicht kennst du einen besseren Weg? – chris

Antwort

1

Ich bin sicher, Es gibt bessere Lösungen, aber die folgende Prüfung Ple funktioniert jetzt für mich. Mein Trick sind die beiden Elemente nach dem Element "30 = CONTENT". Wenn Inhalt von tt_content ist, öffne ich ein "div" -Element und schließe, wenn danach. Vielleicht gibt es einen besseren Weg, dies mit einem speziellen Wickel zu tun?

lib.navMain = COA 
lib.navMain { 

    10 = TEXT 
    10.wrap = | 
    10.value = {$const.lang.navi.skip} 
    10.typolink { 
    parameter.data = page:uid 
    parameter.dataWrap = |#skipMainNavi 
    ATagParams = class="sr-only sr-only-focusable" 
    } 

    20 = HMENU 
    20 { 
    special = directory 
    special.value = {$const.pid.home} 
    entryLevel = 0 

    1 = TMENU 
    1 { 
     expAll = 1 
     target = _top 
     noBlur = 1 

     wrap = <ul class="nav navbar-nav" role="menubar">|</ul> 

     NO { 
     wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li> 
     linkWrap = | 
     ATagParams = role="menuitem" 
     title = field:title 
     ATagTitle.field = subtitle // title 
     } 

     ACT < .NO 
     ACT = 1 
     ACT { 
     wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li> 
     ATagParams = class="mainmenuActive" 
     # linkWrap = <strong>|</strong> 
     } 
    } 

    2 < .1 
    2 { 
     wrap = <div class="drop-wrapp"><div class="drop-wrapp-inner">|</div></div> 

     stdWrap.cObject = COA 
     stdWrap.cObject { 

     20 = HMENU 
     20 { 
      special = directory 
      special.value.data = field:pid 

      1 = TMENU 
      1 { 
      expAll = 1 
      wrap = <div class="drop-block"><ul class="list-unstyled nav-list" role="menubar">|</ul></div> 

      NO { 
       wrapItemAndSub = <li class="first">|</li> |*| <li>|</li> |*| <li class="last">|</li> 
       linkWrap = | 
       ATagParams = role="menuitem" 
       title = field:title 
       ATagTitle.field = subtitle // title 
      } 

      ACT < .NO 
      ACT = 1 
      ACT { 
       wrapItemAndSub = <li class="first active">|</li> |*| <li class="active">|</li> |*| <li class="last active">|</li> 
       ATagParams = class="mainmenuActive" 
       # linkWrap = <strong>|</strong> 
      } 
      } 
     } 

     30 = CONTENT 
     30 { 
      table = tt_content 
      select { 
      pidInList.field = pid 
      where = colPos=99 AND deleted=0 AND hidden=0 
      orderBy = sorting 
      languageField = sys_language_uid 
      max = 2 
      } 

      stdWrap { 
      wrap = | 

      // wrap only if there is content! 
      required = 1 
      } 
     } 

     1 = COA 
     1 { 
      if.isTrue.numRows < lib.navMain.20.2.stdWrap.cObject.30 
      10 = TEXT 
      10.value = <div class="wide"> 
     } 

     100 = COA 
     100 { 
      if.isTrue.numRows < lib.navMain.20.2.stdWrap.cObject.30 
      10 = TEXT 
      10.value = </div><!-- /.wide --> 
     } 
     } 

    } 
    } 

    30 = TEXT 
    30.wrap = <a id="skipMainNavi" class="sr-only">|</a> 
    30.value = &nbsp; 
    30.htmlSpecialChars = 0 
}