只显示今天的新闻 - 银条


Only show todays news - Silverstripe

你好银条专家!

我制作了教程"扩展基本站点"(http://doc.silverstripe.org/en/tutorials/extending_a_basic_site)

到目前为止,这一切都运作良好。

我这样做是为了在主页上显示最新消息:在主页.php:

// ...
public function LatestNews($num=5) {
    $holder = ArticleHolder::get()->First();
    return ($holder) ? ArticlePage::get()->filter('ParentID', 
        $holder->ID)->sort('Date DESC')->limit($num) : false;
}

这在 HomePage.ss:

// ...
public function LatestNews($num=5) {
    $holder = ArticleHolder::get()->First();
    return ($holder) ? ArticlePage::get()->filter('ParentID', 
        $holder->ID)->sort('Date DESC')->limit($num) : false;
}

效果很好!

现在我的问题:我所有的新闻都有一个日期字段。是否可以只显示主页上当前日期的新闻?

我试过这个,但这不起作用(服务器错误)(Datum是我的新闻日期):

public function LatestNews($num) {
    $holder = ArticleHolder::get()->First();
    return ($holder) ? ArticlePage::get()->filter('ParentID', "datum == CURDATE()", 
        $holder->ID)->sort('Date DESC')->limit($num) : false;
}

非常感谢您的帮助!

filter()需要两个值(列和值)或要过滤的键值对数组。因此,如果要过滤多个内容,则需要一个数组作为参数:

$today = date('Y-m-d');
$todaysNews = ArticlePage::get()->filter(array(
    'ParentID' => $holder->ID, 
    'datum' => $today
));

这将返回一个数据列表,您可以像在示例中一样进行排序和限制。

另请参阅文档中:

  • 数据模型和ORM概述
  • 搜索过滤器如何过滤"大于"等...

编辑:因此,控制器中的方法可能如下所示:

public function getTodaysNews($num=5) {
    $holder = ArticleHolder::get()->First();
    $today = date('Y-m-d');
    return $holder
        ? ArticlePage::get()->filter(array(
            'ParentID' => $holder->ID, 
            'datum' => $today
            ))->sort('Date DESC')->limit($num)
        : false;
}