2014-04-16 100 views
1

Silverstripe:我想讓我的菜單按照字母順序對其列表進行排序和分組。我跟着this documentation中的每一步都使用了GroupBy方法,並且無濟於事。
基本上我想要我的子頁面顯示爲菜單如下:silverstripe groupby按字母順序排列的第一個字母

    • 博客
  • Ç
    • CMS工作流
    • 定製翻譯
  • d
    • 數據庫管道工
    • ...

下面什麼做什麼,是在文檔中的是,我得到一個空列表,基本上$ GroupedModules.GroupedBy後實際發生( TitleFirstLetter)不起作用。

我認爲我可能會在這裏錯過的東西是Module類的創建,我不知道在哪裏創建它,它應該存在於Page.php中嗎? 另外,應該命名爲Module?

在此先感謝

回答

3

您鏈接到顯示瞭如何做數據對象的(以他們爲榜樣模塊)組列表的文檔。你想做一個分組列表的頁面,所以你需要稍微改變一下代碼以適應你的需求。

page.php文件

class Page extends SiteTree { 

    // ... 

    public function getTitleFirstLetter() { 
     return $this->Title[0]; 
    } 

    public function getGroupedChildren() { 
     return GroupedList::create($this->Children()->sort('Title')); 
    } 

} 

你的模板

<% loop $GroupedChildren.GroupedBy(TitleFirstLetter) %> 
    <h3>$TitleFirstLetter</h3> 
    <ul> 
     <% loop $Children %> 
      <li>$Title</li> 
     <% end_loop %> 
    </ul> 
<% end_loop %> 
+0

這正是我一直在尋找,我不知道怎麼寫的代碼,返回GroupedList ::創建($這個 - >兒童() - >排序( '標題'));非常好,非常感謝! –