Блок именинников в Drupal 7

Главные вкладки

Аватар пользователя Mascher Mascher 4 мая 2012 в 12:08

Возникла следующая проблема:

Возникла необходимост на Drupal 7 сделать блок, в котором будут выводиться именинники текущей недели Smile

Для 6-ки есть модуль Birthdays, который более менее работает, там конечно много лишнего, но куда нам криворуким деваться...
На 7-ке то же есть этот же модуль, но на хостинге от it-patrol он не пашет, т.к. версия php требуется 5.3, а на хостинге стоит 5.2.

Попробовал решить проблему с помощью Views... Голову сломал, проблему не решил.

Действовал следующим образом:
Добавил поле формата даты в профайл.

В представлении блока добавил фильтр по этому полю профайла.

пробовал ставить now +3 day и now -3 day, эффект тот же.

Фильтр на срабатывает Smile

Есть какие-то мысли по поводу раелизации столь простой задачи на 7-ке? Smile

Может готовые сниппеты есть для блока?

Комментарии

Аватар пользователя Mascher Mascher 4 мая 2012 в 12:28

Я понял почему фильтры не работают Smile год то текущей даты 2012 а у дня рождения другой, потому и не срабатывает, как бы год исключить из поля или фильтров?
А через аргументы как? Можно какой-то примерчик?

Аватар пользователя Mascher Mascher 4 мая 2012 в 14:09

q2_faith wrote:
если у вас установлен date, то должна быть и вьюшка по датам, смотрите ее

Модуль конечно стоит, но вот представлений никаких с аргументами я там не обнаружил...
А что там по аргументам?
Каким образом это работать должно? Я не понимаю.
В каком месте в представлениях аргументы крутятся и как ими там манипулировать?

Аватар пользователя Mascher Mascher 4 мая 2012 в 14:13

drupby wrote:
Вообще то у них есть http://dh.it-patrol.ru/drupal_hosting/drupal-7-хостинг
с php 5.3 .

У меня основной сайт на 6-ке, с 7-кой я пока только экспериментирую. И как-то не очень все удачно получается Smile Переезжать на другой хостинг ради тестового сайта не очень хочется... Тем более там модуль не стабильный.

Аватар пользователя q2_faith q2_faith 4 мая 2012 в 14:22

"Mascher" wrote:
А что там по аргументам?

используйте как аргумент ваше поле с датой, выставьте текущую, детализация недели или дни. на память все не помню, но прекрасно делается на 6-ке. на 7-ке еще легче должно быть.

Аватар пользователя Mascher Mascher 4 мая 2012 в 14:45

q2_faith wrote:
используйте как аргумент ваше поле с датой, выставьте текущую, детализация недели или дни. на память все не помню, но прекрасно делается на 6-ке. на 7-ке еще легче должно быть.

Тобишь я в фильтре добавляю поле даты дня рождения как аргумент и потом выбираю тип проверки код PHP и сравниваю аргумент с текущей датой?

Аватар пользователя Mascher Mascher 4 мая 2012 в 15:08

q2_faith wrote:
добавляете контекстный фильтр, добавляете Дата: Дата (node) и настраиваете по своему усмотрению

Фильтр добавил выбрал поле с датой дня рождения, а вот как настраивать по своему усмотрению, не разобрался, там можно проверять разными способами, но ни один способ, кроме PHP ничего вразумительного не показывает...

Попробовал хотябы по текущему месяцу проверку сделать, что-то нифига не пашет Smile
PHP код проверки:

<?php
$month 
date('n');
$adatagetdate($argument);
return ( (int)
$month == (int)$adata['mon'] );?>
Аватар пользователя Айдар Айдар 4 мая 2012 в 15:00

"Mascher" wrote:
ереезжать на другой хостинг ради тестового сайта не очень хочется...

Все же рекомендую переехать, если всерьез 7-кой займетесь - там немало проблем будет с разными модулями.
Вот только сервера с php 5.3. не пробовал с 6-кой, так что не могу сказать, подойдет ли 1 акк или придется оставлять старый.

Аватар пользователя Mascher Mascher 4 мая 2012 в 15:09

Айдар wrote:
"Mascher" wrote:
ереезжать на другой хостинг ради тестового сайта не очень хочется...

Все же рекомендую переехать, если всерьез 7-кой займетесь - там немало проблем будет с разными модулями.
Вот только сервера с php 5.3. не пробовал с 6-кой, так что не могу сказать, подойдет ли 1 акк или придется оставлять старый.

У меня работало на 5.3 раньше, на другом хостинге, но там были свои заморочки. Переезжать пока не буду Smile

Аватар пользователя q2_faith q2_faith 4 мая 2012 в 15:11

"Айдар" wrote:
Вот только сервера с php 5.3. не пробовал с 6-кой, так что не могу сказать, подойдет ли 1 акк или придется оставлять старый.

я пробовал, полет нормальный. только 6-ку нужно обновить до последней версии
"Mascher" wrote:
Фильтр добавил выбрал поле с датой дня рождения, а вот как настраивать по своему усмотрению, не разобрался, там можно проверять разными способами, но ни один способ, кроме PHP ничего вразумительного не показывает...
Попробовал хотябы по текущему месяцу проверку сделать, что-то нифига не пашет :)

устал с вами бороться, без php все прекрасно работает

Аватар пользователя Mascher Mascher 5 мая 2012 в 7:09

q2_faith wrote:
устал с вами бороться, без php все прекрасно работает

А как проверку делать без php? Мая не понимать.

Вот скринкаст фильтра:

При таком раскладе если в поле день рожденья ввести дату с текущим годом, например 06 мая 2012 года, фильтр срабатывает, ну а если ставить реальную дату, например 06 мая 1979 года, не срабатывает.

Аватар пользователя volandnet volandnet 6 мая 2012 в 13:01

Два дня мучаюсь с той же проблемой. Пока ни фига не выходит.
Нужен аргумент в php, но что не пробую: то выводит всех, то никого. Если что получится, отпишусь. Ну и обратная тпросьба.

Аватар пользователя Mascher Mascher 10 мая 2012 в 10:16

volandnet wrote:
Два дня мучаюсь с той же проблемой. Пока ни фига не выходит.
Нужен аргумент в php, но что не пробую: то выводит всех, то никого. Если что получится, отпишусь. Ну и обратная тпросьба.

Ок, пока ничего не вышло Smile

Аватар пользователя MKhabibullin MKhabibullin 14 мая 2012 в 7:55

Столкнулся с проблемой вывода именниников за текущий месяц в блоке через views.
И вроде бы есть там нужный фильтр birthday:mounth, принимающий номер месяца, но как ему скормить текущий месяц ? Пробовал варианты date("m"), [current-date:mounth], но так не работает. Если же задать номер месяца явно, то все срабатывает. Подскажите, что нужно подставить в фильтр, чтобы выборка шла по текущему месяцу ?

Аватар пользователя Mascher Mascher 15 мая 2012 в 12:22

Блин ну для этого придется день месяц и год рожденья в разные поля вводить? Или как? Я не понял Smile
А как тогда сделать кол-во дней чтоб зависели от выбранного месяца?
Че-то я не так понял наверное...
Или это все возможно после установки модуля Birthdays? Так то понятно, но как без модуля сделать? Smile Он работает только на php 5.3.0

Аватар пользователя volandnet volandnet 20 мая 2012 в 17:27

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

Аватар пользователя Dark_kz Dark_kz 20 мая 2012 в 23:01

Стырить запрос у вьюса и написать свой в обычный блок. Переписать запрос.
А вообще я поставил модуль birthdays, и написал запрос к нему, хотя и это было лишним)

Аватар пользователя GAV68 GAV68 10 ноября 2015 в 11:48

День добрый столкнулся с такой-же задачей в 7 Друпале,долго думал как вывести ближайших именинников, вывел через стандартную вьюху которую делает при установке модуль Birthdays.
Я в Друпал навичок, только начинаю освивать, потому сильно не пинайте за реализацию.....
Вообщем немного подправил вывод на страничке и в блоке под себя следующим образом:
Для странички,(скриншот в 1 вложении)в представлении вывод

Формат: Таблица

в таблице добавил нужные мне поля

Пользователь: Имя
Пользователь: Изображение
Пользователь: День рождения (День рождения)
Пользователь: День рождения (Знак зодиака)
Пользователь: Немного о себе (Немного о себе)

В настройках таблицы поставил галку на поле "имя пользователя" и поля "день рождения" возможность сртировки по возрастанию
В настройках поля "Пользователь: Изображение" при отсутствии результатов вывел картинку с пустой аватаркой на тот случай если пользователь не загрузил аватарку, просто прописал путь к файлу no-avatar.png на сервере

Теперь если изображения(аватарки) у пользователя нет подгружается эта картинка.

В критерии фильтрации добавил следующие фильтры

Пользователь: Активен (Да)
Пользователь: День рождения:day (между 1/1 и 31/12)

Почему в поле "День рождения:day" я выбрал (между 1/1 и 31/12)

всё очень просто некоторые пользователи не ставят день рождения у меня это поле не обязательно при заполнении профиля, соответственно далее в блоке они будут крутиться в именинниках с пустыми датами постоянно, что-бы этого не произошло я и вывел фильтр между 1/1 и 31/12 т.е. в вывод попадут только те пользователи у которых в поле "день рождения" в профиле стоит любая дата между 1/1 и 31/12, если поле пустое то пользователь не попадёт в именинники вообще.

Это то что касается отображения всех именинников на страничке,но мне-же было нужно что-бы на главной к примеру в блоке выводились ближайшие именинники.
Я сделал их вывод в блоке с помощью слайдшоу

в этой-же вьюхе идём в настройки блока, здесь все настройки такие-же как и на страничке, только вывод не таблицей а как я писал выше слайдшоу, добавим только в настройках блока следующее

Навигатор
Использовать навигатор: Отображать указанное количество элементов | 6 элементов
Ссылка "Ещё": Да

Всё, исходя из этих настроек в блоке будут крутиться первых 6 пользователей отсортированных по возрастанию в таблице, т.е. те у которых дни рождения ближе всего по дате. Для вывода в блоке использовал модуль Views Slideshow 7.x-3.0, настройки самого слайдшоу выбираете по желанию я выбрал эффект fadeZoom.
Блок выводим там где нам нужно на странице у меня на главной крутится в левой колонке.

Долго бился и не мог понять как сделать вывод именинников, в результате оказалось всё довольно просто сам не ожидал что получится.

Аватар пользователя Andruxa Andruxa 13 февраля 2013 в 20:41

Ну, вот и меня накрыло этой задачей.

Ставить birthdays было влом, разбивать дату др на год-месяц-день тем более, заюзал hook_views_query_alter()

Создал стандартную вьюху на базе таблицы юзера:
фильтрация - по полю др юзера, в условии - больше или равно now,
сортировка - по полю с др юзера, возрастание-убывание роли не играет,
вывод первых нескольких значений.

Разумеется - оно не работает (с), т.к. года рождения у юзеров:
а) меньше сегодняшней даты
б) разные

Надо выбрать первые несколько тех, у которых день-месяц рождения больше now, и отсортировать их по дню-месяцу рождения, оба раза игнорируя год:

function MyModuleName_views_query_alter(&$view, &$query) {
  if ($view -> name == 'MyViewName') {
    $condition = str_replace('%Y', date('Y'), $query -> where[хз1]['conditions'][хз2]['field']);
    $query -> where[хз1]['conditions'][хз2]['field'] = $condition;
    $order = 'DATE_FORMAT('  . $query -> orderby[хз3]['field'] . ", '%m-%d')";
    $query -> orderby[хз3]['field'] = $order;
  }
}

хз1, хз2, хз3 - зависят от порядка условия фильтрации и сортировки в представлении, в случае если они потом изменятся - вьюха как минимум перестанет работать и как максимум пойдёт по женской линии.