2014-04-16 104 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 ::创建($这个 - >儿童() - >排序( '标题'));非常好,非常感谢! –