Показывать только сегодняшние новости — Silverstripe

Привет Специалисты по Серебряной Ленте!

Я сделал учебник «Расширение базового сайта» (http://doc.silverstripe.org/en/tutorials/extending_a_basic_site)

До сих пор все работало очень хорошо.

Я сделал это, чтобы показать последние новости на домашней странице:
В HomePage.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;
}

Большое спасибо за Вашу помощь!

0

Решение

filter() нужны либо два значения (столбец и значение), либо массив пар ключ-значение для фильтрации. Поэтому, если вы хотите отфильтровать более чем одну вещь, вам нужен массив в качестве параметра:

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

Это вернет DataList вы можете сортировать и ограничивать, как вы сделали в своем примере.

Смотрите также в документах:

РЕДАКТИРОВАТЬ:
Таким образом, метод в вашем контроллере может выглядеть так:

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;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]