是否可以在SilverStripe菜单中获取孩子的孩子?

时间:2015-04-29 04:11:02

标签: navigation silverstripe template-variables

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

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

但是我没有得到第三层的预期输出。实际上是否有可能成为孩子们的孩子?如果没有,那我该怎么做呢?谢谢!

1 个答案:

答案 0 :(得分:3)

是的,可以循环播放儿童之子循环。

您的代码对我来说是正确的。它应该正常工作。

以下是一些可能需要检查的问题。

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

确保站点树具有3级深度的页面。很明显要检查。

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

以下是一些测试模板代码,可用于检查站点树的输出。这可以帮助您调试问题:

<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>