Привет Специалисты по Серебряной Ленте!
Я сделал учебник «Расширение базового сайта» (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;
}
Большое спасибо за Вашу помощь!
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;
}
Других решений пока нет …