是否可以在 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 中添加自定义样式