среда, 18 сентября 2013 г.

Дни рождения с помощью Views 3 в Drupal 7

Очень часто необходимо вывести список пользователей у которых сегодня день рождения. Для этого можно использовать поле типа Date и Views. К сожалению во Views нельзя сделать фильтрацию по полю даты, так как такая фильтрация подразумевает точное совпадение даты. Необходимо указать год, что в случае дня рождения не подходит, так как нужна не точная дата, а совпадение месяца и дня.
Можно сделать вывод списка с помощью отдельного модуля, но иногда использовать views удобнее,так как можно гибко настраивать, какие поля выводить и в каком виде.
Итак задача: сделать вывод списка пользователей, родившихся сегодня, с помощью Views.

Шаг 0. Добавляем поле типа Date к User сущности

Поле должно называться Birthday (внутреннее название - field_birthday).

Шаг 1. Создаем View. 

Administration > Structure > Add New View. Называем View - Birthdays. View должен выводить пользователей (Show Users).
Нажимаем "Сохранить и продолжить" (Save & Continue).

Шаг 2. Добавляем контекстный фильтр.

Выбираем поле User: Birthday (field_birthday) и нажимаем кнопку добавить (Add).






















Шаг 3. Настройка фильтра.

В настройках фильтра, указываем опцию "Provide default value". Выбираем PHP Code. 
Вставляем в поле следующий код:

$results = db_query("SELECT entity_id FROM field_data_field_birthday WHERE DATE_FORMAT(field_birthday_value,'%m-%d') = DATE_FORMAT(NOW(),'%m-%d') AND entity_type = 'user'");
$ids = array();
foreach ($results as $result) {
  $ids[] = $result->entity_id;
}
return implode(',',$ids);


Осталось только отметить в настройках фильтра "Allow multiply values" и сохранить View. После этого можно открыть страницу Birthdays на сайте: http://site.com/b?q=birthdays и наслаждаться списком пользователей :-)