silverstripe groupby子页面按字母顺序排列第一个字母

时间:2014-04-16 21:00:01

标签: php sorting group-by silverstripe

Silverstripe:我希望我的菜单按列表排序和分组。我已按照this documentation中的每一步使用GroupBy方法,但无济于事 基本上我希望我的子页面在菜单中显示如下:

    • 博客
  • Ç
    • CMS工作流程
    • 自定义翻译
  • d
    • 数据库管道工
    • ...

在执行文档中的操作之后实际发生的是我得到一个空列表,基本上$ GroupedModules.GroupedBy(TitleFirstLetter)不起作用。

我认为我可能在这里缺少的是创建Module类,我不知道在哪里创建它,它是否存在于Page.php中? 另外,应该命名为Module?

提前致谢

1 个答案:

答案 0 :(得分: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 %>