TYPO3 确定菜单项的页面类型并用自定义 class 包裹 div

TYPO3 determine page type of menu item and wrap div with custom class around it

我的目标是对不同的页面类型应用不同的导航逻辑。例如 shortcut 类型将是容器(FE 中的下拉列表,快捷方式本身是虚拟的 link),standard 类型 - 包含您可以导航到的内容的页面。因此,当在 FE 导航中用户选择页面时:

drop-down list appears
if (type of page in list == standard)
    can navigate to page in list;
else if (type of page in list == shortcut)
   GO TO drop-down list appears

我知道你可以这样做:

lib {
    main-nav = HMENU
    main-nav {
        1 = TMENU
        1 {
            expAll = 1
            NO = 1
            NO.wrapItemAndSub = <li>|</li>
            NO.stdWrap.cObject = CASE
            NO.stdWrap.cObject {
                key.field = doktype
                default = TEXT
                default {
                    field = title
                }
                # standard page type
                1 = TEXT
                1 {
                    field = title
                    wrap = <div>|</div>
                }....

因此,如果页面类型为 standard

,您将获得用 div 包裹的页面标题

但是我需要做什么来包装整个菜单项而不是仅仅包装标题?

我认为您需要结合使用 HTML、CSS 和 javascript。

在打字稿中,您根据页面类型准备了具有不同标记的 HTML。然后您的 javascript 必须处理点击事件,以防出现快捷方式页面,点击应该打开下拉菜单而不是转到该页面。 (添加事件处理程序)

所以你需要给 javascript 一些东西来识别快捷方式页面。
使用您提到的 CASE 对象,您可以使用所有必要的信息构建适当的 HTML(您可以使用数据属性)。

要获得更详细的帮助,您需要更具体地说明您想要实现的目标。

如果只是将 div 放在整个子菜单周围,我想你已经得到的应该应用于 wrapItemAndSub 而不是

lib {
    main-nav = HMENU
    main-nav {
        1 = TMENU
        1 {
            expAll = 1
            NO = 1
            NO.wrapItemAndSub.cObject = CASE
            NO.wrapItemAndSub.cObject {
                key.field = doktype
                default = TEXT
                default {
                    value = <li>|</li>
                }
                # standard page type
                1 = TEXT
                1 {
                    value = <li><div>|</div></li>
                }....