首页 > 解决方案 > 如何通过 TypoScript 获取 HMENU 项目的“级别标题”?

问题描述

我有一个菜单(带有 的 HMENU special = updated),它为我提供了 3 个类别的最新子页面和子页面。页面结构在后端如下所示:

在此处输入图像描述

除了标题之外,我还想输出相应类别的名称(父级 1 页面)。

这是我的 TypoScript 尝试:

lib.myMenu = HMENU
lib.myMenu {
    special = updated
    special{
        value.field = 10,11,12
        beginAtLevel = 1
        limit = 99
    }
    1 = TMENU
    1{
        NO{
            doNotLinkIt = 1
            stdWrap.cObject = COA
            stdWrap.cObject {
                10 = TEXT
                10{
                    wrap = <h3>|</h3>
                    field = seo_title // title
                    typolink.parameter.field = uid
                }

                20 = HMENU
                20{
                    wrap = <div class="category attempt-1">|</div>
                    special = rootline
                    special.range = 1|1
                    special.value.field = uid # does not work
                    1 = TMENU
                    1.NO.allWrap = |
                }

                30 = TEXT
                30{
                    wrap = <div class="category attempt-2">|</div>
                    data = leveltitle : 1 # does not work as expected
                }
            }
        }
    }
}

不幸的是,它不起作用,因为……</p>

  1. special = rootline不支持special.value
  2. data = leveltitle : 1使用当前页面的 ID,而不是 TMENU 项目 ID。

有没有人有另一种方法如何使用 TypoScript 获得相应类别的标题?

编辑:背景信息/这是需要什么

使用这个菜单,我打算替换现有项目的新闻模块 ext:news。现在使用页面而不是新闻记录,并且此菜单创建列表视图。当然会添加一个 TypoScript 页面浏览器。

标签: typo3typoscripttypo3-9.xtypo3-10.x

解决方案


我不会重建完整的菜单项生成(NO.doNotLinkIt = 1)。

只需使用NO.after.cObject = COA.

leveltitle : 1如果你想拥有当前页面的标题是正确的。

如果你显示一个根行菜单也是一样的:它是为当前页面生成的。

如果您想要另一个页面的 levelfield,您需要自己构建它。

  • 在打字稿中,您可能会使用用户函数。(有一个核心函数用于获取给定页面 id 的根行)

  • 如果您使用 FLUID 生成菜单,则可以使用 viewhelper。(您可能会从viewhelpermenu.directory的这个选项或VHpage.breadCrumb in的这个选项中得到启发ext:vhs。)


编辑:

您可以将所需的信息直接存储在pages记录中。

向记录添加一个新字段(或使用任何未使用的字段)。

然后确保每个类别页面都包含一些页面 TS_config:

TCADefaults.pages.<yourfield> = CategoryName

使用此配置,下面的每个新页面都会自动设置此值。
当然,您需要手动或通过一些手动查询为所有现有页面设置这些值。

如果要阻止编辑者更改此值,您需要使用首页上的此 TSConfig 从编辑表单中删除该字段:

TCEForm.pages.<yourfield>.hide= 1

推荐阅读