【问题标题】:SilverStripe 3: How to sort by date, months descending BUT days ascendingSilverStripe 3:如何按日期排序,月份降序但天数升序
【发布时间】:2019-08-07 13:40:58
【问题描述】:

我有数据对象Events按其日期字段排序,模板中的$NewsDate如下:

<% loop Events.Sort(NewsDate,DESC) %>

这很好用,并首先显示最近或未来的月份。但是,我希望一个月内的日子以升序运行,首先是本月的 1 日。

类似:

<% loop Events.Sort(NewsDate,DESC).Sort(NewsDate.DayOfMonth,ASC) %>

【问题讨论】:

    标签: sorting templates content-management-system silverstripe


    【解决方案1】:

    如果您无法通过模板层执行此操作,则可以使用控制器方法执行此操作:

    # File: MyPageController.php
    public function SortedEvents()
    {
        return $this->data()->Events()->sort([
            'NewsDate' => 'DESC',
            'DayOfMonth' => 'ASC',
        ]);
    }
    
    # File: MyPage.ss
    <% loop $SortedEvents %>
        ...
    <% end_loop %>
    

    【讨论】:

    • 谢谢。它不起作用,因为我认为 DayOfMonth 不是我的数据对象中的字段,而是 Date 的方法。 api.silverstripe.org/3/Date.html这是错误:“'字段列表'中的未知列'DayOfMonth'”。我想它需要像“NewsDate.DayOfMonth”这样的东西。你知道怎么写这个吗?谢谢
    • 您将无法通过基于 PHP 的字段进行有效过滤 - 也许您可以使用 MySQL 中的 DATE 函数来代替过滤?
    • 感谢您的帮助,但我发现最简单的方法是使用 InPast() 和 InFuture() 来划分列表,并使用一种 ASC 和另一种 DESC。像这样
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多