Typoscript 在子项后的菜单中附加内容

Typoscript append content in menu after sub-items

我想创建一个包含项目内容元素的弹出菜单。

后端的结构基本如下:

Menu1
   Submenu1.1
   Submenu1.2
   Submenu1.3
Menu2
   Submenu2.1
   Submenu2.2
   Submenu2.3

Menu1 和 Menu2 在页面上有内容元素。

我设法访问了内容元素,但是,这些元素在子菜单项之前呈现。之后我需要它们。

我得到的:

<div class="headeroverlay">
    <div class="dropdown-overlay" id="overlay_4">
        
        <!-- CONTENT ELEMENTS -->
        <div class="contentimagesandtext">
            <div class="item"><!-- Content Element 1 of Menu 1 --></div>
            <div class="item"><!-- Content Element 2 of Menu 1 --></div>
        </div>

        
        <!-- SUB MENU -->
        <div class="subnav-block">
            <div class="subnav-link"><a href="/sub1.1">Submenu1.1</a></div>
            <div class="subnav-link"><a href="/sub1.2">Submenu1.2</a></div>
            <div class="subnav-link"><a href="/sub1.3">Submenu1.3</a></div>
        </div>
    </div>
    <div class="dropdown-overlay topdropdown" id="overlay_5">
        <!-- same for Menu 2 -->
    </div>
</div>

但我需要切换内容和子菜单:

<div class="headeroverlay">
    <div class="dropdown-overlay" id="overlay_4">
        
        <!-- SUB MENU -->
        <div class="subnav-block">
            <div class="subnav-link"><a href="/sub1.1">Submenu1.1</a></div>
            <div class="subnav-link"><a href="/sub1.2">Submenu1.2</a></div>
            <div class="subnav-link"><a href="/sub1.3">Submenu1.3</a></div>
        </div>
        
        
        <!-- CONTENT ELEMENTS -->
        <div class="contentimagesandtext">
            <div class="item"><!-- Content Element 1 of Menu 1 --></div>
            <div class="item"><!-- Content Element 2 of Menu 1 --></div>
        </div>
        
    </div>
    <div class="dropdown-overlay topdropdown" id="overlay_5">
        <!-- same for Menu 2 -->
    </div>
</div>

到目前为止,这是我的脚本:

lib.menuOverlay = HMENU
lib.menuOverlay{
    1 = TMENU
    1.expAll = 1
    1.NO.doNotShowLink = 1
    1.NO.wrapItemAndSub = <div class="dropdown-overlay topdropdown" id="overlay_{field:uid}">|</div>
    1.NO.wrapItemAndSub.insertData = 1

    # Append Content Elements to stdWrap2
    1.NO.stdWrap2.append = CONTENT
    1.NO.stdWrap2.append {
        table = tt_content
        select {
            pidInList.stdWrap.data = field:uid
        }
        wrap = <div class="contentimagesandtext">|</div>
        renderObj.stdWrap.wrap = <div class="item">|</div>
    }

    2 = TMENU
    2.insertData = 1
    2.wrap = <div class="subnav-block">|</div>
    2.NO.wrapItemAndSub = <div class="subnav-link">|</div>

}

我尝试将 append 添加到 wrapItemAndSub。这会将内容元素放在子菜单之后,但是我没有将它们放在一起的包装器。

请注意,我需要包装器的 id 标记中的 Level-1 页面 UID

问题:如何强制 append 在项目之后,或者如何在我的 wrapItemsAndSub 周围添加一个包含父 UID 的包装器?

你应该爱护你的围巾。

您在 append 内容的地方使用 stdWrap2append 包装了 stdWrap2 的换行字符串(它是空的),使 append 成为 stdWrap2.
的唯一值 现在 stdWrap2 没有标记在前后分割包装的位置。所以一切都在包装内容之前。您需要 stdWrap2:

中的拆分标记
stdWrap2 = |
stdWrap2.append = ...

另一方面:您可以使用 append 作为在内容之后获取其值的唯一包装。

受到this answer的启发,我设法做到了我需要的。

我将 COA 附加到我的第一级菜单,并将内容和另一个带有子菜单项的 HMENU 放在那里,如下所示:

lib.menuOverlay = HMENU
lib.menuOverlay {
    1 = TMENU
    1.expAll = 1
    1.NO.doNotShowLink = 1
    1.NO.wrapItemAndSub = <div class="dropdown-overlay topdropdown" id="overlay_{field:uid}">|</div>
    1.NO.wrapItemAndSub.insertData = 1

    1.NO.stdWrap2.append = COA
    1.NO.stdWrap2.append {
        10 = HMENU
        10 {
            special = directory
            special.value.data = field:uid
            1 = TMENU
            1.insertData = 1
            1.wrap = <div class="subnav-block">|</div>
            1.NO.wrapItemAndSub = <div class="subnav-link">|</div>
        }
        20 = CONTENT
        20 {
            table = tt_content
            select {
                pidInList.stdWrap.data = field:uid
            }
            wrap = <div class="contentimagesandtext">|</div>
            renderObj.stdWrap.wrap = <div class="item">|</div>
        }
    }
}