Typo3 根据第一级的不同,具有不同第二级的打字稿菜单

Typo3 根据第一级的不同,具有不同第二级的打字稿菜单,typo3,typoscript,typo3-8.x,Typo3,Typoscript,Typo3 8.x,我正在尝试构建一个带有打字脚本的菜单,其中第二级菜单根据第一级菜单项的不同而有所不同-这是我迄今为止尝试过的,但它没有按预期工作: lib.mainnav = HMENU lib.mainnav { wrap = <ul id="nv-main">|<li class="responav"><i class="fas fa-bars"></i></li></ul> 1 = TMENU 1 {

我正在尝试构建一个带有打字脚本的菜单,其中第二级菜单根据第一级菜单项的不同而有所不同-这是我迄今为止尝试过的,但它没有按预期工作:

lib.mainnav = HMENU
lib.mainnav {

    wrap = <ul id="nv-main">|<li class="responav"><i class="fas fa-bars"></i></li></ul>

    1 = TMENU
    1 {
        expAll = 1
        NO = 1
        NO.wrapItemAndSub = <li>|</li>
        NO.stdWrap.htmlSpecialChars = 1

        CUR = 1
        CUR.wrapItemAndSub = <li class="current">|</li>
        CUR.stdWrap.htmlSpecialChars = 1
    }

    # von 1 (TMENU) kopieren
    2 < .1
    2 {
        expAll = 1
        wrap = <div class="nv-main-sub-bg"><div class="nv-main-sub-wrapper clearfix">|</div></div>
        wrap.override = <div class="nv-main-sub-bg"><div class="nv-main-sub-wrapper indented clearfix">|</div></div>
        wrap.override.if {
            value = 6
            equals.data = page:uid
        }

        stdWrap.cObject = COA
        stdWrap.cObject {

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

                1 = TMENU
                1 {
                    wrap = <div class="nv-main-col-sub"><ul>|</ul></div>

                    NO = 1
                    NO.allWrap = <li>|</li>
                    NO.stdWrap.htmlSpecialChars = 1
                    NO.after.cObject = COA
                    NO.after.cObject {

                        wrap = <div class="nv-main-info-wrapper"><div class="nv-main-col-info">|</div></div>

                        # Text aus dem Feld subtitle oder title der Seiteneigenschaften auslesen
                        10 = TEXT
                        10 {
                            value.field = subtitle // title
                            stdWrap.wrap = <p>|</p>
                        }

                        # Bild aus Reiter Resourcen der Seiteneigenschaften auslesen (nur bei Page-UID 4)
                        20 = FILES
                        20 {
                            if.value.field = pid
                            if.equals = 4
                            references {
                                table = pages
                                # Seiten-ID
                                uid.dataWrap= {field:uid}
                                fieldName = media
                            }
                            renderObj = IMAGE
                            renderObj {
                                file.width = 290c
                                file.height = 200c
                                file.import.data = file:current:uid
                                file.crop.data = file:current:crop
                                file.treatIdAsReference = 1
                                altText.data = file:current:title
                                ##params = class="img-responsive"
                                wrap = |
                            }
                        }

                        # Text aus dem Feld "abstract" auslesen (nur bei Page-UID 6)
                        30 = TEXT
                        30 {
                            if.equals.field = pid
                            if.value = 6
                            value.field = abstract
                            stdWrap.wrap = <p class="b-sub">|</p>
                        }
                    }

                    CUR < .NO
                    CUR.allWrap = <li class="current">|</li>

                }

            }

        }

    }

}
HTML结构:

<ul id="nv-main">

    <li>
        <a href="">Item 1</a>

        <div class="nv-main-sub-bg">

            <div class="nv-main-sub-wrapper clearfix">

                <div class="nv-main-col-sub">

                    <ul>
                        <li>
                            <a href="">Subitem 1 ** with text and picture **</a>

                            <div class="nv-main-info-wrapper">

                                <div class="nv-main-col-info">
                                    <p>XXX</p> <!— from title/subtitle —>
                                    <img src=„XXX“ border="0"> <!— from Resources —>
                                </div>

                            </div>

                        </li>

                        <li> … </li>
                        <li> … </li>
                        <li> … </li>
                        …

                    </ul>

                </div>

            </div>

        </div>

    </li>

    <li> … </li>

    <li>
        <a href="">Item 3</a>

        <div class="nv-main-sub-bg">

            <div class="nv-main-sub-wrapper **indented** clearfix">

                <div class="nv-main-col-sub">
                    <ul>
                        <li>
                            <a href="">Subitem 1 ** only with text **</a>

                            <div class="nv-main-info-wrapper">

                                <div class="nv-main-col-info">
                                    <p class="b-head">XXX</p> <!— from title/subtitle —>
                                    <p class="b-sub">XXX</p> <!— from abstract —>
                                </div>

                            </div>

                        </li>

                        <li> … </li>
                        <li> … </li>
                        <li> … </li>
                        …
                    </ul>

                </div>

            </div>

        </div>

    </li>

    <li> … </li>
    <li> … </li>

</ul>
    • XXX

    • XXX

      XXX


我最近也遇到了类似的问题

第二级和第三级导航必须取决于第一级的选定项目

是否需要将第二个leven嵌套到活动项中

<ul class="first-level">  
    <li>item 1</li>
    <li>item 2
        <ul class="second-level">  
            <li>item 3</li>
    </li>
</ul>
  • 项目1
  • 项目2
    • 项目3
或者你能处理这样的结构吗

<ul class="first-level">  
    <li>item 1</li>
    <li>item 2</li>
</ul>
<ul class="second-level">  
    <li>item 3</li>
</ul>
  • 项目1
  • 项目2
  • 项目3
通常处理菜单中的“位置”是选项拆分的任务,但这需要完全重写第二级,因为它必须放在第一级项目的“之后”部分

但是,由于子菜单的行为实际上是由它所属的父页面决定的,而不仅仅是由该父页面在菜单的第一级中所处的位置决定的,因此您应该选择特定的PID值,而不是位置


为此,您可以使用“if”或“cObject”大小写,以便根据其项的pid值更改第二级。

一种解决方案是呈现第二级的所有信息,并通过CSS决定将显示哪些部分(取决于第一级上由一级页面的属性设置的匹配类)

另一种方法是(正如Joey提到的):根据当前页面的
pid
构建
.after
对象。您有一个页面列表,其中包含“仅使用文本”的特殊呈现,或者(更复杂)您使用
pid
访问指示此特殊呈现的一级页面的属性

带有页面
uid
s列表的简单解决方案可以是:

2.after.cObject = CASE
2.after.cObject {
    key.field = pid

    default = COA
    default {
        // rendering of **with text and picture**
    }

    // uid of level1 page 
    123 = COA
    123 {
        // rendering of **only with text**
    }
    // alternative level1 page with this rendering:
    234 < .123
}

谢谢你的回答-我需要像你的第一个例子一样嵌套它。但是菜单本身运行良好-仅在第二级的不同内容中我有一些问题…..请提供更多信息:键入3版本、您的页面树、预期的HTML标记谢谢您的帮助!:-)虽然我不是打字本方面的专家,但请您解释一下,在我的打字本中,您的代码示例应该放在哪里?第一个代码(
2.after.cObject
)将取代您的定义(
lib.mainnav.2.after.cObject=COA
),第二个将保留您给定的对象,并将
.if
添加到
lib.mainnav.2.after.cObject.20.1.NO.after.cObject.20
。非常感谢!!使用第一个代码,它现在可以工作了。:-)但是,仍然存在一个问题:根据pid,我还需要另一个包装-我已经用wrap.override尝试过了-但它不起作用(请参见
2.wrap=|
)。你能给我一个提示吗?我假设错误的上下文为
equals.data=page:uid
从当前页面访问uid。只需使用
equals.field=uid
即可使用当前
menuItem
的uid。嗨,伯恩德,我没有这样做。但是由于我只需要向wrap添加一个CSS类,所以现在我用jQuery解决了这个问题。我刚刚将PID用作CSS-ID,现在它可以工作了!:-)
stdWrap.dataWrap=|
再次感谢您的帮助!
2.after.cObject = CASE
2.after.cObject {
    key.field = pid

    default = COA
    default {
        // rendering of **with text and picture**
    }

    // uid of level1 page 
    123 = COA
    123 {
        // rendering of **only with text**
    }
    // alternative level1 page with this rendering:
    234 < .123
}
NO.after.cObject.20.if {
    isInList.field = pid
    // store pages uids in constant like: 1,2,34,50,87
    value = {$specialPagesUidsList}  
    negate = 1
}