Добрый день, имеются пользователи с дополнительные полем типа Date, в данном поле хранится дата дня рождения.
Как можно с помощью Views отобразить список пользователей у которых сегодня день рождения?
Если я добавляю фильтр по Date (т.е. фильтр который поставляется модулем Date Views) и выбираю в нём Is equal to -> Enter relative value -> now (или today), то ничего не отображается, т.к. год рождения не соответствует текущему году.
Если у пользователь год поменять на текущий (2019) то успешно отображается, другими словами как обойти значения года, и смотреть только на месяц и день.
Ответы
Делается это не при помощи фильтра а при помощи контекстного фильтра.
Добавляете два фильтра один по месяцу, другой по дню по этому полю на нужное поле.
В настройках фильтров указываете предоставить значение по-умолчанию "текущая дата".
Добавлено:
После более детального изучения вопроса, понял что такая задача уже многие годы остается не решенной для Drupal 7. В Drupal 8 это исправлено.
Если вам надо делать фильтрацию в D7 по полю Date (unix) то попробуйте модуль https://www.drupal.org/project/views_date_granularity.
После включения модуля появятся новые контекстные фильтры для полей Date (unix).
Issues по этой теме:
Хм, попробовал вашим способом, т.е. с помощью модуля Date Views создал представление которое отображает пользователей всех, и в контекстный фильтр добавил фильтр по Date, где в настройках выбрал кастомное поле (День рождения) и Granularity в Month, плюс также Provide default value - Current date
По вашей версии ожидал, что фильтр будет идти исключительно по месяцу, т.е. любой год, любой число, но если месяц с текущим совпадает - то попадает под фильтр
Но увы не получилось, ощущение что Granularity идёт также от года, к месяцу, к дню и т.д.
Либо я в чём то не прав, подскажите пожалуйста
мой подход:
блок с ФИО + дата рожд.
кастомный модуль для фильтрации запроса и передачи во вьюс
ниже модуль под 8.х
<?php
use Drupal\views\Plugin\views\query\QueryPluginBase;
use Drupal\views\ViewExecutable;
/**
* Implements hook_views_query_alter().
* @param \Drupal\views\ViewExecutable $view
* @param \Drupal\views\Plugin\views\query\QueryPluginBase $query
*/
function drusr_views_query_alter(ViewExecutable $view, QueryPluginBase $query) {
if ($view->id() != 'dnyushki') {
return;
}
// поле с д.р. "**node__field_data_rozdenia1**"
$query->addField('node__field_data_rozdenia1', 'field_data_rozdenia1_value');
$field = 'node__field_data_rozdenia1.field_data_rozdenia1_value';
$expression = "DAYOFYEAR (`field_data_rozdenia1_value`) = DAYOFYEAR (CURRENT_DATE())";
$query->addWhereExpression(0, $expression);
// сортировка по дате без учета года
$query->addOrderBy(NULL, "DAYOFYEAR($field)", 'ASC', 'order_field');
}
Неужели только такое решение: https://stackoverflow.com/questions/24562255/filter-view-in-drupal-by-da...
Пожалуйста так не делайте. Такой подход не Drupal way.
Полностью согласен =)... Но как тогда?