根据第一级,具有不同第二级的 Typoscript 菜单

Typoscript Menu with different 2nd level depending on 1st level

我正在尝试构建一个带有打字错误的菜单,其中第 2 级根据第 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>

                }

            }

        }

    }

}

这将创建一个 2 级菜单,其中第 2 级是菜单项的组合,每个菜单项都带有文本信息和图片已经可用。我想要的是一个不同的二级菜单,具体取决于所选的一级项目。为此,我需要更改包装并用其他文本替换图像。

你能给我一个提示吗?非常感谢您的帮助!

迈克尔

编辑: 打字错误 V.8.7.16

页面树:

Item  1
-- Subitem 1 **with text and picture**
-- Subitem 2 **with text and picture**
-- Subitem 3 **with text and picture**
-- ...
-- Subitem XX **with text and picture**
Item 2
-- Subitem 1 **with text and picture**
-- Subitem 2 **with text and picture**
-- Subitem 3 **with text and picture**
-- ...
-- Subitem XX **with text and picture**
Item 3
-- Subitem 1 **only with text** (headline and copytext)
-- Subitem 2 **only with text** (headline and copytext)
-- Subitem 3 **only with text** (headline and copytext)
-- ...
-- Subitem XX **only with text** (headline and copytext)
Item 4
-- Subitem 1 ...
-- ...
Item 5
-- Subitem 1 ...
-- ...

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>

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

二级和三级导航必须根据一级选择的项目。

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

<ul class="first-level">  
    <li>item 1</li>
    <li>item 2
        <ul class="second-level">  
            <li>item 3</li>
    </li>
</ul>

或者你能处理这样的结构吗?

<ul class="first-level">  
    <li>item 1</li>
    <li>item 2</li>
</ul>
<ul class="second-level">  
    <li>item 3</li>
</ul>

通常在菜单中处理 "position" 是选项拆分的工作,但这需要完全重写第二级,因为它必须放在菜单的 "after" 部分第一级项目。

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

您可以为此目的使用 "if" 或 "cObject" CASE,以便可以根据其项目的 pid 值更改第二级。

一个解决方案是呈现第二层的所有信息,并由 CSS 决定显示哪些部分(取决于 [=31] 在第一层设置的匹配 class =]一级页面)

另一种方法是(正如 Joey 提到的):根据当前页面的 pid 构建您的 .after 对象。要么你有一个页面列表,其中有特殊呈现 'only with text' 或(更复杂)你使用 pid 访问一级页面的 属性 表示这种特殊呈现。

包含第 uid 页列表的简单解决方案可能是:

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
}

如果您的选项 **only with text****with text and picture** 相同,只是没有图片,您可以修改现有代码(使用 HMENUspecial=directory 似乎非常复杂) 空白图片:

NO.after.cObject.20.if {
    isInList.field = pid
    // store pages uids in constant like: 1,2,34,50,87
    value = {$specialPagesUidsList}  
    negate = 1
}