如果当前页面没有子页面,则显示当前页面的子页面,但显示父页面的子页面

时间:2017-03-11 23:07:05

标签: typo3 typoscript

我有这样一个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:菜单应显示指向foobar页面的链接。
  • 我在foofoobarfoobaz应该出现。
  • 我在foobar此处还应显示foobarfoobaz,而不是空菜单。

Typo3版本是7.6。

3 个答案:

答案 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
        # ...
    }
}

这样你就不需要打扰为什么你当前页面的菜单是空的,这就足够了。在包装方面可以有点繁琐,但是......