Очень часто необходимо вывести список пользователей у которых сегодня день рождения. Для этого можно использовать поле типа 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 и наслаждаться списком пользователей :-)
Спасибо. Вот вставил для модуля 'profile2' поэтому нужно было entity_type = 'user' заменить на entity_type = 'profile2' ну и конечно же не забыть создать пользователя с текущей датой =))) и еще весь этот код вынес в template.php в функцию birthday_ids_from_view , а в сипет написал if(function_exists('birthday_ids_from_view')){
ОтветитьУдалитьreturn birthday_ids_from_view();
}