Делаю календарь событий с помощью модуля Date, назначаю в типе материалов page в соответствующем Date поле field_events_date начальную и конечную дату события. Годы могут быть весьма разные (ибо история города), а вот отображать события через Views требуется по текущей дате, т.е. по дню и месяцу события без учета года. Ставлю Views PHP. Для проверки во Views в ПОЛЯ вначале ставлю сабжевую дату, а ниже - поле Global PHP, где в блоке Output code пишу следующее:
<?php
// Получаем текущий год и текущий порядковый номер дня в году
$now_year = date('Y');
$now_nomber = (int) date('z') + 1;
// Получаем из БД значения начальной и конечной даты из поля даты события field_events_date
$start = $data->field_field_events_date[0]['raw']['value'];
$finish = $data->field_field_events_date[0]['raw']['value2'];
// Вытаскиваем из значений дат номер месяца и дня
$start_month = substr($start,5,2);
$start_day = substr($start,8,2);
$finish_month = substr($finish,5,2);
$finish_day = substr($finish,8,2);
// Формируем начальную и конечную дату по формату даты, но уже с текущим годом
$start_date = $now_year . '-' . $start_month . '-' . $start_day . ' 00:00:00';
$finish_date = $now_year . '-' . $finish_month . '-' . $finish_day . ' 00:00:00';
// Вычисляем порядковые номера дня в году для этих дат
$start_number = (int) date('z', strtotime($start_date)) + 1;
$finish_number = (int) date('z', strtotime($finish_date)) + 1;
// Отбираем события по попаданию текущего номера дна между номерами дней дат
if ($now_nomber >= $start_number && $now_nomber <= $finish_number) {
$condition_event = 'Активный';
$date_event = TRUE;
} else {
$condition_event = 'Не активный';
$date_event = FALSE;
}
echo '<div class="condition-event">'.$condition_event.'</div>';
?>
Код работает как нужно. Ок! Но теперь-то надо отфильтровать материалы. Копи-пастю код в КРИТЕРИИ ФИЛЬТРАЦИИ по Global PHP, вместо $date_event = TRUE ставлю return TRUE и вот тут ожидает облом:
Notice: Undefined property: stdClass::$field_field_events_date in __lambda_func()
Т.е. Views ФИЛЬТР не понимает путь к значению, в то время как Views ПОЛЯ понимает. Замечу, что ДОСТУПНЫЕ ПЕРЕМЕННЫЕ и там и там одинаковые. В чем дело? Посоветуйте, пожалуйста, как выставить нужный путь для фильтра.
Да, с темой Как отфильтровать ноды по дате без учета года с помощью Views в Drupal 7? знаком, но Хочется помучиться (С).
Комментарии
Присмотритесь к
- https://www.drupal.org/project/calendar
- https://www.drupal.org/project/event_calendar
- https://www.drupal.org/project/pretty_calendar
Нормальные велосипеды
Чего-то я ступил капитально - пора лечиться электричеством... Зачем мне вообще фильтр, если я и так могу вывести в поле Global PHP в output строго по TRUE всё, что мне нужно по изложенному коду, заранее добавив выше этого поля нужные скрытые поля. А при попадании под FALSE вообще ничего не выводить.
Ну да можно вообще все данные получать , без никаких фильтров и рендерить только определённые.
Именно так я в итоге и сделал, когда всё стало ясно.