Вы здесь

Как отобразить с помощью Views список пользователей у которых сегодня день рождения?

0

Добрый день, имеются пользователи с дополнительные полем типа Date, в данном поле хранится дата дня рождения.
Как можно с помощью Views отобразить список пользователей у которых сегодня день рождения?
Если я добавляю фильтр по Date (т.е. фильтр который поставляется модулем Date Views) и выбираю в нём Is equal to -> Enter relative value -> now (или today), то ничего не отображается, т.к. год рождения не соответствует текущему году.
Если у пользователь год поменять на текущий (2019) то успешно отображается, другими словами как обойти значения года, и смотреть только на месяц и день.

Версия Drupal: 
7.x
Вопрос задан 11.01.2019 - 14:32

Пожалуйста так не делайте. Такой подход не Drupal way.

Комментарий оставлен 17.01.2019 - 13:40

Ответы

0

Делается это не при помощи фильтра а при помощи контекстного фильтра.
Добавляете два фильтра один по месяцу, другой по дню по этому полю на нужное поле.
В настройках фильтров указываете предоставить значение по-умолчанию "текущая дата".

Добавлено:
После более детального изучения вопроса, понял что такая задача уже многие годы остается не решенной для Drupal 7. В Drupal 8 это исправлено.
Если вам надо делать фильтрацию в D7 по полю Date (unix) то попробуйте модуль https://www.drupal.org/project/views_date_granularity.
После включения модуля появятся новые контекстные фильтры для полей Date (unix).

Issues по этой теме:

Ответ дан 20.01.2019 - 15:24

Хм, попробовал вашим способом, т.е. с помощью модуля Date Views создал представление которое отображает пользователей всех, и в контекстный фильтр добавил фильтр по Date, где в настройках выбрал кастомное поле (День рождения) и Granularity в Month, плюс также Provide default value - Current date
По вашей версии ожидал, что фильтр будет идти исключительно по месяцу, т.е. любой год, любой число, но если месяц с текущим совпадает - то попадает под фильтр
Но увы не получилось, ощущение что Granularity идёт также от года, к месяцу, к дню и т.д.

Либо я в чём то не прав, подскажите пожалуйста

Комментарий оставлен 04.02.2019 - 00:13
0

мой подход:
блок с ФИО + дата рожд.
кастомный модуль для фильтрации запроса и передачи во вьюс

ниже модуль под 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');

}
Ответ дан 09.02.2019 - 00:00