我有以下页面结构:
toppage
-page1
-page2
-page3
-page4
- (menu separator)
-page5
-page6
-page7
-page8
第 1 页到第 4 页用于定义水平主菜单。
第5 页到第 7 页用于定义垂直侧菜单。
主菜单使用以下排版符:
lib.mainMenu = HMENU
lib.mainMenu.special = directory
lib.mainMenu.special.value = {$main_menu_start_id}
lib.mainMenu.entryLevel = 0
lib.mainMenu.1 = TMENU
lib.mainMenu.1 {
// Fix to limit items in main menu
maxItems = 4
}
是否可以在排版中用如下所示的内容替换maxItems
方法?
- 获取菜单分隔符的页面 ID。
- 使用语句说主菜单应该在此页面ID结束。
有风险的方法,我怀疑是否有可能用纯粹的 TypoScript 做到这一点
相反,我建议使用以下示例构建水平菜单(第 1-4 页special=list
:
lib.mainMenu = HMENU
lib.mainMenu.special = list
lib.mainMenu.special.value = 1,2,3,4
lib.mainMenu.1 = TMENU
//etc
然后垂直菜单作为除前 4 项之外的所有其他项目的菜单
lib.sideMenu = HMENU
lib.sideMenu.excludeUidList = 1,2,3,4
lib.sideMenu.1 = TMENU
// etc
其他方式
您也可以将hidden in menu
的页面放在开头,让我们将其称为horizontal menu items
,然后在HMENU
中使用special=directory
来构建包含所有子项的菜单。无需更改 TS 即可更轻松地添加/删除/更改项目:
结构:
- horizontal menu items (uid: 123, hidden in menu)
|-- page 1
|-- page 2
|-- page 3
--- page 4
- page 5
- page 6
- page 7
TS:
lib.mainMenu = HMENU
lib.mainMenu.special = directory
lib.mainMenu.special.value = 123
lib.mainMenu.1 = TMENU
//etc
lib.sideMenu = HMENU
lib.sideMenu.1 = TMENU
// etc
这是可能的。但是你不能使用选项拆分然后。
(未经测试(
lib.mainMenu.1.NO.allStdWrap {
prepend = LOAD_REGISTER
prepend {
data = REGISTER:hideMenuItem
ifEmpty = 0
override = 1
override.if.equals.field = doktype
override.if.value = 199
}
if.isFalse.data = REGISTER:hideMenuItem
}
我没有测试,但主要原则应该变得清晰:创建一个内部 REGISTER,为每个菜单项检查。如果有 doktype 菜单分隔符 (199( 的菜单项,则设置寄存器。如果设置了寄存器,则不要呈现菜单。