XPDO where по дате
Привет, помогите пожалуйста разобраться с датой через XPDO. Я уверен, что неправильно с ней работаю, направьте на путь истинный.
Берётся текущий день, затем через цикл выводятся 5 материалов за этот день, в конце цикла прибавляется к текущей дате +1 день, затем цикл опять выводит материалы за данный день и т.д.
Вопрос следующий, как можно исключить из выборки дни, в которых не было материалов(т.е. если у текущего дня нет материалов, вместо него берётся след. день, где есть материалы).
Берётся текущий день, затем через цикл выводятся 5 материалов за этот день, в конце цикла прибавляется к текущей дате +1 день, затем цикл опять выводит материалы за данный день и т.д.
Вопрос следующий, как можно исключить из выборки дни, в которых не было материалов(т.е. если у текущего дня нет материалов, вместо него берётся след. день, где есть материалы).
$data = date('Y-m-d'); // тек. день
for($i = 0; $i < 4; $i++){
// Получение диапазона дня
$date_from = strtotime($data." 00:00:00");
$date_to = strtotime($data." 23:59:59");
$where = $modx->newQuery('modResource');
$where->limit(5);
$where->where(array(
'publishedon:>' => $date_from,
'publishedon:<' => $date_to,
));
$resources = $modx->getCollection('modResource',$where);
//var_dump(count($resources));
$res .= '<div class="col-md-3">';
$res .= '<p class="lead"><b>Дата:</b> '.$data.'</p>';
foreach ($resources as $k) {
$res .= '<p>'.$k->get('pagetitle').'</p>';
$res .= '<p><small>Дата: '.$k->get('publishedon').'</small></p>';
}
$res .= '</div>';
$data = date('Y-m-d',(strtotime('+ 1 days', strtotime($data)))); // Счётчик на след. день
}
PS: Заодно подскажите, как можно проще получить след. и пред. день. Я делаю так:$data_prev = date('Y-m-d',(strtotime('-1 days', strtotime($data))));//след. день
$data_next = date('Y-m-d',(strtotime('+1 days', strtotime($data)))); //пред. день
И для выборки материалов за конкретный день так:$data = date('Y-m-d'); // тек. день
$date_from = strtotime($data." 00:00:00");
$date_to = strtotime($data." 23:59:59");
$where->where(array(
'publishedon:>' => $date_from,
'publishedon:<' => $date_to,
));
Комментарии: 1
поставь проверку на пустой массив перед циклом foreach
if ($resources ) {
foreach ($resources as $k) {
$res .= '<p>'.$k->get('pagetitle').'</p>';
$res .= '<p><small>Дата: '.$k->get('publishedon').'</small></p>';
}
}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.