Silverstripe 所有子项的递归菜单

Silverstripe 所有子项的递归菜单,silverstripe,silverstripe-4,Silverstripe,Silverstripe 4,我正在尝试生成站点树中所有页面的嵌套菜单 这个节目有两个关卡,我不知道有多少关卡 目前,我知道在一个点上至少有四个深度,所以我有:

我正在尝试生成站点树中所有页面的嵌套菜单

这个节目有两个关卡,我不知道有多少关卡

目前,我知道在一个点上至少有四个深度,所以我有:


它可以工作,但不可靠(如果编辑器添加了另一个级别)。这是相当令人讨厌的。有递归选项吗?

我们可以创建一个递归菜单项模板,以创建与站点树一样深的菜单

首先,我们在主题的
Includes
目录中创建一个
MenuItem.ss
模板文件。在此模板中,我们显示菜单项链接并检查是否有任何子页面。我们循环浏览所有子页面,并为每个子页面包含
MenuItem.ss
模板:

包括/MenuItem.ss

<li class="$LinkingMode">
    <a href="$Link" aria-label="Go to the $Title.XML page">$MenuTitle</a>

    <% if $Children %>
    <ul>
        <% loop $Children %>
        <% include Includes/MenuItem %>
        <% end_loop %>
    </ul>
    <% end_if %>
</li>
  • 模板中的主菜单代码如下所示:

    <nav class="main-menu">
        <ul>
            <% loop $Menu(1) %>
            <% include Includes/MenuItem %>
            <% end_loop %>
        </ul>
    </nav>