2015-04-29 65 views
1

我组建了一个3层的导航菜单中SilverStripe 3.1模板,并有下面的代码在我的模板:是否可以在SilverStripe菜单中获得儿童的孩子?

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

不过我没有收到我从二三线期望的输出。真的有可能得到儿童的孩子吗?如果不是,那我该怎么做呢?谢谢!

+0

该代码看起来不错。你应该能够像你一样循环通过儿童循环。所有的页面都设置为'ShowInMenus'吗? '$ Children'只返回设置为'ShowInMenus'的页面。否则,您可以使用'$ AllChildren'来获取隐藏页面。网站树的网页是否有3层深?什么是'$模型'?这是您添加到Page类的自定义变量吗? – 3dgoo

+0

@ 3dgoo是的,我想要显示的所有网页都有正确设置的ShowInMenus。是的,有3个层次的页面。是的,$ Model是一个自定义变量。 –

+0

@ 3dgoo进一步研究它,它看起来像我得到的$链接的价值,但不是模型,所以我只需要调查自定义变量。谢谢你的帮助;你想移动你的评论是一个答案? –

回答

3

是的,它有可能循环通过Children of a Child循环。

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

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

确保每个级别的所有页面都设置为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>