我有这样一个pagetree:
home
foo
foobar
foobaz
bar
barbar
contact
我想显示一个导航菜单,其中包含当前页面的所有子页面。我用TypoScript
:
subNav = HMENU
subNav {
entryLevel = -1
1 = TMENU
1 {
wrap = <ul id="submenu">|</ul>
NO = 1
NO {
wrapItemAndSub = <li>|</li>
}
ACT = 1
ACT {
wrapItemAndSub = <li id="active">|</li>
}
}
}
但是:当前页面没有子页面时,应显示父页面的子页面。
示例:
home
:菜单应显示指向foo
和bar
页面的链接。foo
:foobar
和foobaz
应该出现。foobar
:此处还应显示foobar
和foobaz
,而不是空菜单。 Typo3版本是7.6。
答案 0 :(得分:2)
我可以解决它。如果当前页面包含子页面,我必须将entryLevel
的{{1}}设置为HMENU
。 -1
表示:从当前页面的che子页面开始。如果网页没有子页面,则-1
必须设置为entryLevel
。这意味着:从父页面的子节点开始。
-2
有一个entryLevel
属性:
override
答案 1 :(得分:1)
这是一个很好的问题。目前我只看到使用entryLevel的stdWrap属性的解决方案。所以你可以创建一个entryLevel.stdWrap.cObject = CONTENT
,然后在pidInRootline = current(默认?)的页面上执行一个select查询。在CONTENT的renderObj
中,如果找到子页面,则返回entryLevel,如果没有,则返回下一个最高级别的entryLevel。
像这样应该是可能的,但我希望任何人都有更好的解决方案。
答案 2 :(得分:1)
为了完整起见,我想提一下,有时候可以选择从前端来考虑这些问题&#34;。
E.g。如果存在隐藏菜单设置的子页面或包含或排除菜单中的页面的其他条件,除非您在entrylevel.override
中重现该菜单,否则您将获得一个空菜单。使用类似
lib.subMenu = HMENU
lib.subMenu {
entrylevel = -1
1 = TMENU
# ...
ifEmpty.cObject = HMENU
ifEmpty.cObject {
entrylevel = -2
1 = TMENU
# ...
}
}
这样你就不需要打扰为什么你当前页面的菜单是空的,这就足够了。在包装方面可以有点繁琐,但是......