2015-04-29 105 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>