Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 打字脚本菜单,对列表中包含的特定页面ID进行特殊处理_Typo3_Typoscript - Fatal编程技术网

Typo3 打字脚本菜单,对列表中包含的特定页面ID进行特殊处理

Typo3 打字脚本菜单,对列表中包含的特定页面ID进行特殊处理,typo3,typoscript,Typo3,Typoscript,在打字菜单上把我的头发撕下来。我需要以下行为: “特殊”菜单项pageID的列表以常量{$special}维护 将呈现一个菜单,显示站点根目录的导航。如果pageID是“special”,那么它将获得一个特殊的div wrap,并且它的子页面列表嵌套在div wrap中。如果项目不是“特殊的”,那么它不会得到特殊的包装,也不会显示子页面。所有“特殊”项目都显示在页面列表的顶部 我尝试了几种方法: 方法1。一个接一个地给我们两张纸。第一个菜单仅显示{$SPECIAL},第二个菜单显示siteroo

在打字菜单上把我的头发撕下来。我需要以下行为:

  • “特殊”菜单项pageID的列表以常量{$special}维护

  • 将呈现一个菜单,显示站点根目录的导航。如果pageID是“special”,那么它将获得一个特殊的div wrap,并且它的子页面列表嵌套在div wrap中。如果项目不是“特殊的”,那么它不会得到特殊的包装,也不会显示子页面。所有“特殊”项目都显示在页面列表的顶部

  • 我尝试了几种方法:

    方法1。一个接一个地给我们两张纸。第一个菜单仅显示{$SPECIAL},第二个菜单显示siteroot,不包括{$SPECIAL}项

    问题:如果使用special.directory显示{$special},则不会呈现父页面。如果使用special.list,则不会呈现子页面。啊

    方法2。呈现一大块自定义菜单TS,使用if条件检查页面是否为{$SPECIAL}

    问题:我可以在{$special}项上显示特殊包装,但我无法解决如何呈现特定于每个项的子页面列表

    到目前为止,我的方法2代码是:

        MAIN_NAV.20 = HMENU
        MAIN_NAV.20 {
          special = directory
          special.value = {$SITE_ROOT}
          excludeUidList = {$RESTRICTED_ROOT}, {$HOME_SHORTCUT}
    
          1 = TMENU
          1{
           NO{
             # suppress standard menu output
             doNotShowLink = 1
    
             # build each menu item conditionally
             stdWrap2.cObject = COA
             stdWrap2.cObject{
    
             #Standard
             10 = TEXT
             10{
               # not in list of special pages?
               if.value = {$NAV_CONTAINERS}
               if.isInList.field = uid
               if.negate = 1
    
               field = nav_title//title
               typolink.parameter.field = uid
               wrap = <ul><li>|</li></ul>
             }
    
             #Special
             20 = TEXT
             20.wrap = <div class="SPECIAL"><ul><li><span>|</span>
             20 {
                if.value.field = uid
                if.equals = {$SPECIAL}
    
                field = nav_title//title
    
              }
    
              30 = TEXT
              30.wrap = |</li></ul></div>
              30 {
                      if.value.field = uid
                      if.equals = {$SPECIAL}
              }
    
              }
            }
          }
        }
    
    MAIN_NAV.20=humenu
    主导航台20{
    特殊=目录
    special.value={$SITE\u ROOT}
    excludeUidList={$RESTRICTED\u ROOT},{$HOME\u SHORTCUT}
    1=t菜单
    1{
    没有{
    #抑制标准菜单输出
    doNotShowLink=1
    #有条件地构建每个菜单项
    stdWrap2.cObject=COA
    stdWrap2.cObject{
    #标准
    10=文本
    10{
    #不在特殊页面列表中?
    if.value={$NAV_容器}
    if.isInList.field=uid
    if.negate=1
    字段=导航标题//标题
    typlink.parameter.field=uid
    包裹
    }
    #特别的
    20=文本
    20.wrap=
    • | 20 { if.value.field=uid if.equals={$SPECIAL} 字段=导航标题//标题 } 30=文本 30.wrap=|
    30 { if.value.field=uid if.equals={$SPECIAL} } } } } }
    我不能硬编码(比如“特殊项1作为文本元素,然后特殊项1作为菜单的子项,然后特殊项1作为文本元素,然后特殊项2作为子项…”),因为{$Special}理论上可以是任意数量的页面


    有人能提供任何建议来帮助您使用一种或其他方法吗?

    我认为用户Ila是对的,如果您使用special=list,您应该能够通过添加TMENUs来添加多个级别(子页面)

    另一方面,我有一个类似的菜单,我想分享。它包含两种特殊的渲染情况-一种使用
    覆盖.if
    ,另一种使用
    案例

    temp.mainnav = HMENU
    temp.mainnav {
      wrap = <nav>|</nav>
      entryLevel = 0
    
      1 = TMENU
      1 {
            noBlur = 1
            expAll = 1
            wrap = <ul>|</ul>
            NO {
                wrapItemAndSub=<li class="p{page:uid}">|</li>   
                wrapItemAndSub.insertData = 1               
            }
        }
    
        2 = TMENU
        2   {
            noBlur = 1
            expAll = 1
            NO {
                wrapItemAndSub=<li>|</li>       
                // http://labor.99grad.de/2013/07/10/typo3-hmenu-einen-menupunkt-anders-darstellen/
                doNotLinkIt.override = 1
                doNotLinkIt.override.if {
                   value = {$pidsDoNotLinkInMenu}
                   isInList.field = uid
                }
                stdWrap.wrap.override = <p class="unlinkedMenuItem">|</p>
                stdWrap.wrap.override.if {
                   value = {$pidsDoNotLinkInMenu}
                   isInList.field = uid
                }
            }
        }
    
    
        3 = TMENU
        3 {
            noBlur = 1
            expAll = 1
            wrap = <ul class="level3">|</ul>
    
            NO.wrapItemAndSub.cObject = CASE
            NO.wrapItemAndSub.cObject  {
            //http://stackoverflow.com/questions/18899573/how-to-apply-a-different-wrap-in-a-tmenu-for-certain-items-only/18910302?noredirect=1#18910302
    
                key.field = uid                
    
                // normal item
                default = TEXT
                default.value =  <li class="level3">|</li>     
    
                // special item 
                {$somePid} = TEXT
                {$somePid}.value = <li class="level3 foo">|</li>
                {$somePid}.append < temp.sometemp
    
                // some other special item
                {$someOtherpid} = TEXT
                {$someOtherpid}.value = <li class="level3 bar">|</li>
                {$someOtherpid}.append < temp.someothertemp
    
            }
        }
    
    }
    
    temp.mainnav=humenu
    临时主导航{
    包裹=|
    entryLevel=0
    1=t菜单
    1 {
    noBlur=1
    expAll=1
    包裹=
      |
    没有{ wrapItemAndSub=
  • |
  • wrapItemAndSub.insertData=1 } } 2=t菜单 2 { noBlur=1 expAll=1 没有{ Wrapitemadsub=
  • |
  • // http://labor.99grad.de/2013/07/10/typo3-hmenu-einen-menupunkt-anders-darstellen/ doNotLinkIt.override=1 doNotLinkIt.override.if{ 值={$pidsDoNotLinkInMenu} isInList.field=uid } stdWrap.wrap.override=

    |

    stdWrap.wrap.override.if{ 值={$pidsDoNotLinkInMenu} isInList.field=uid } } } 3=t菜单 3 { noBlur=1 expAll=1 包裹=
      NO.wrapItemAndSub.cObject=CASE NO.wrapItemAndSub.cObject{ //http://stackoverflow.com/questions/18899573/how-to-apply-a-different-wrap-in-a-tmenu-for-certain-items-only/18910302?noredirect=1#18910302 key.field=uid //正常项目 默认值=文本 default.value=
    • //特别项目 {$somePid}=TEXT {$somePid}.value=
    • |
    • {$somePid}.append| {$someOtherpid}.append

      我认为这两种方法都可以用来实现您的目标。

      为了在Humenu中呈现子页面,您需要根据第一级定义第二级。类似于“2=TMENU”