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

Posted

技术标签:

【中文标题】是否可以在 SilverStripe 菜单中获取 Children of children?【英文标题】:Is it possible to get Children of children in a SilverStripe menu? 【发布时间】:2015-07-08 04:16:21 【问题描述】:

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

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

但是,我没有从第 3 层获得预期的输出。真的有可能得到孩子的孩子吗?如果没有,那我应该怎么做?谢谢!

【问题讨论】:

该代码看起来不错。您应该能够像您正在做的那样遍历 Children 循环的 Children。所有页面都设置为ShowInMenus吗? $Children 仅返回设置为 ShowInMenus 的页面。否则,您也可以使用$AllChildren 来获取隐藏页面。站点树是否有 3 层深的页面? $Model 是什么?这是您添加到 Page 类的自定义变量吗? @3dgoo 是的,我想要显示的所有页面都正确设置了 ShowInMenus。是的,页面有 3 层深。是的,$Model 是一个自定义变量。 @3dgoo 进一步调查,看起来我得到了 $Link 的值而不是模型,所以我只需要调查自定义变量。谢谢你的帮助;您想将您的评论作为答案吗? 很高兴我能帮上忙。当然,我会发布我的 cmets 作为答案。 当您发现问题时,请务必分享您的解决方案,以防将来对任何人有所帮助。 【参考方案1】:

是的,可以遍历子循环的子循环。

您的代码在我看来是正确的。它应该可以正常工作。

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

确保每个级别的所有页面都将ShowInMenus 设置为true。 $Children$Menu(1) 仅返回将 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>

【讨论】:

以上是关于是否可以在 SilverStripe 菜单中获取 Children of children?的主要内容,如果未能解决你的问题,请参考以下文章

银条。上传到直播。获取“SilverStripe 框架需要定义 $databaseConfig。”

SilverStripe 功能测试是不是在发出 post 请求后将数据保存在会话中

如何在 SilverStripe 4 CMS 中添加自定义样式

使用 SilverStripe 的计划任务

Silverstripe 3.2:如何在前端表单中动态添加和更新数据对象?

Silverstripe - 在模板中循环非关联数组