2016-03-21 17 views
0

TYPOスクリプトを使用してナビゲーションメニューを構築しています。このメニューには、tt_contentテーブルの内容で拡張されています。tt_contentのコンテンツに応じて、TYPOスクリプトメニューのCSSクラスを設定する方法

ここで、tt_contentのコンテンツがあり、親ページのページタイトルを2番目のレベルに入れると、親要素のCSSクラス(.drop-wrapp)を変更しようとしています(ここでは、「PAGE TITLE FIRST LEVEL ")。

これは私のTypoScriptは、これまでのところです:

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:

<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

最小限の例を得るためにコードを合理化していただけますか?これはあなたの質問に答えるのに役立ちます。最初は、いわゆるREGISTER cObjectsを使用しようと思います –

+0

私の質問には、HTMLを追加しました。その間に、私のために働く解決策を見つけました(答えを参照)。セクシーではなく、働いています。あなたはもっと良い方法を知っているかもしれませんか? – chris

答えて

1

私は確信しています:

これは非常にbreafly私が達成したいものです、よりよい解決策がありますが、次の試験プリーは今私のために働く。私のトリックは、 "30 = CONTENT"要素の後の2つの要素です。 tt_contentからのコンテンツがある場合、私は "div"要素を開き、その後は閉じます。おそらく特別なラップでこれを行うより良い方法がありますか?

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 
} 
関連する問題