是否可以在 SilverStripe 菜单中获得 Children of children?

Is it possible to get Children of children in a SilverStripe menu?

我正在 SilverStripe 3.1 模板中组合一个 3 层导航菜单,并在我的模板中包含以下代码:

<% loop $Menu(1) %>
...
  <% loop $Children %>
...
    <% loop $Children %>
     <li><a href="$Link">$Model</a></li>
    <% end_loop %>
  <% end_loop %>
<% end_loop %>

但是我没有从第三层获得我期望的输出。 Children 的 Children 真的有可能吗?如果没有,那我应该怎么做呢?谢谢!

是的,可以通过 Children of a Children 循环。

我认为你的代码是正确的。它应该可以正常工作。

这里有几个可能需要检查的问题。

确保每个级别的所有页面都将 ShowInMenus 设置为 true。 $Children$Menu(1) 只有 returns 个 ShowInMenus 设置为 true 的页面。可以在任何页面的“设置”选项卡中找到此复选框。否则,您也可以使用 $AllChildren 而不是 $Children 来获取隐藏页面。

确保站点树的页面深度为 3 层。一个显而易见的事情要检查。

$Model 不是内置页面变量。这必须是您设置的自定义变量。确保将其设置为页面,填写了值并且可以在前端访问。

这里有一些测试模板代码,您可以使用它来检查站点树的输出。这可能会帮助您调试问题:

<ul>
<% loop $Menu(1) %>
    <li>
        <a href="$Link">$Title - $Model</a>
        <% if $Children %>
        <ul>
        <% loop $Children %>
            <li>
                <a href="$Link">$Title - $Model</a>
                <% if $Children %>
                <ul>
                <% loop $Children %>
                    <li>
                        <a href="$Link">$Title - $Model</a>
                    </li>
                <% end_loop %>
                </ul>
                <% end_if %>
            </li>
        <% end_loop %>
        </ul>
        <% end_if %>
    </li>
<% end_loop %>
</ul>