Возникла следующая проблема:
Возникла необходимост на Drupal 7 сделать блок, в котором будут выводиться именинники текущей недели
Для 6-ки есть модуль Birthdays, который более менее работает, там конечно много лишнего, но куда нам криворуким деваться...
На 7-ке то же есть этот же модуль, но на хостинге от it-patrol он не пашет, т.к. версия php требуется 5.3, а на хостинге стоит 5.2.
Попробовал решить проблему с помощью Views... Голову сломал, проблему не решил.
Действовал следующим образом:
Добавил поле формата даты в профайл.
В представлении блока добавил фильтр по этому полю профайла.
пробовал ставить now +3 day и now -3 day, эффект тот же.
Фильтр на срабатывает
Есть какие-то мысли по поводу раелизации столь простой задачи на 7-ке?
Может готовые сниппеты есть для блока?
Комментарии
через аргументы надо
Я понял почему фильтры не работают год то текущей даты 2012 а у дня рождения другой, потому и не срабатывает, как бы год исключить из поля или фильтров?
А через аргументы как? Можно какой-то примерчик?
если у вас установлен date, то должна быть и вьюшка по датам, смотрите ее
Модуль конечно стоит, но вот представлений никаких с аргументами я там не обнаружил...
А что там по аргументам?
Каким образом это работать должно? Я не понимаю.
В каком месте в представлениях аргументы крутятся и как ими там манипулировать?
Вообще то у них есть http://dh.it-patrol.ru/drupal_hosting/drupal-7-хостинг
с php 5.3 .
У меня основной сайт на 6-ке, с 7-кой я пока только экспериментирую. И как-то не очень все удачно получается Переезжать на другой хостинг ради тестового сайта не очень хочется... Тем более там модуль не стабильный.
используйте как аргумент ваше поле с датой, выставьте текущую, детализация недели или дни. на память все не помню, но прекрасно делается на 6-ке. на 7-ке еще легче должно быть.
Тобишь я в фильтре добавляю поле даты дня рождения как аргумент и потом выбираю тип проверки код PHP и сравниваю аргумент с текущей датой?
добавляете контекстный фильтр, добавляете Дата: Дата (node) и настраиваете по своему усмотрению
Фильтр добавил выбрал поле с датой дня рождения, а вот как настраивать по своему усмотрению, не разобрался, там можно проверять разными способами, но ни один способ, кроме PHP ничего вразумительного не показывает...
Попробовал хотябы по текущему месяцу проверку сделать, что-то нифига не пашет
PHP код проверки:
<?php
$month = date('n');
$adata= getdate($argument);
return ( (int)$month == (int)$adata['mon'] );?>
Все же рекомендую переехать, если всерьез 7-кой займетесь - там немало проблем будет с разными модулями.
Вот только сервера с php 5.3. не пробовал с 6-кой, так что не могу сказать, подойдет ли 1 акк или придется оставлять старый.
У меня работало на 5.3 раньше, на другом хостинге, но там были свои заморочки. Переезжать пока не буду
я пробовал, полет нормальный. только 6-ку нужно обновить до последней версии
устал с вами бороться, без php все прекрасно работает
А как проверку делать без php? Мая не понимать.
Вот скринкаст фильтра:
При таком раскладе если в поле день рожденья ввести дату с текущим годом, например 06 мая 2012 года, фильтр срабатывает, ну а если ставить реальную дату, например 06 мая 1979 года, не срабатывает.
Более того, и без аргументов.
...если не ошибаюсь.
ошибаешься) было бы время скринкаст бы выложил)
Два дня мучаюсь с той же проблемой. Пока ни фига не выходит.
Нужен аргумент в php, но что не пробую: то выводит всех, то никого. Если что получится, отпишусь. Ну и обратная тпросьба.
Ок, пока ничего не вышло
Столкнулся с проблемой вывода именниников за текущий месяц в блоке через views.
И вроде бы есть там нужный фильтр birthday:mounth, принимающий номер месяца, но как ему скормить текущий месяц ? Пробовал варианты date("m"), [current-date:mounth], но так не работает. Если же задать номер месяца явно, то все срабатывает. Подскажите, что нужно подставить в фильтр, чтобы выборка шла по текущему месяцу ?
Все, нашел решение тут: http://drupal.org/node/1406026
Контекстный фильтр со значением по умолчанию
PHP return date('m', REQUEST_TIME);
Блин ну для этого придется день месяц и год рожденья в разные поля вводить? Или как? Я не понял
А как тогда сделать кол-во дней чтоб зависели от выбранного месяца?
Че-то я не так понял наверное...
Или это все возможно после установки модуля Birthdays? Так то понятно, но как без модуля сделать? Он работает только на php 5.3.0
Затрахался окончательно и ничего другого не придумал, как добавить еще одно поле с датой, где ставлю ту же дату, а год ставлю текущий. У меня надо вывести дни рождения не из профиля, а из типа материалов "дни рождения легенд", так что модуль Birthdays не подойдет. Пока до конца года будет работать, а там если ничего не придумаю, придется редактировать и менять год на 2013. Вообщем пока через ж...
Стырить запрос у вьюса и написать свой в обычный блок. Переписать запрос.
А вообще я поставил модуль birthdays, и написал запрос к нему, хотя и это было лишним)
День добрый столкнулся с такой-же задачей в 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.
Блок выводим там где нам нужно на странице у меня на главной крутится в левой колонке.
Долго бился и не мог понять как сделать вывод именинников, в результате оказалось всё довольно просто сам не ожидал что получится.
Ну, вот и меня накрыло этой задачей.
Ставить birthdays было влом, разбивать дату др на год-месяц-день тем более, заюзал hook_views_query_alter()
Создал стандартную вьюху на базе таблицы юзера:
фильтрация - по полю др юзера, в условии - больше или равно now,
сортировка - по полю с др юзера, возрастание-убывание роли не играет,
вывод первых нескольких значений.
Разумеется - оно не работает (с), т.к. года рождения у юзеров:
а) меньше сегодняшней даты
б) разные
Надо выбрать первые несколько тех, у которых день-месяц рождения больше now, и отсортировать их по дню-месяцу рождения, оба раза игнорируя год:
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 - зависят от порядка условия фильтрации и сортировки в представлении, в случае если они потом изменятся - вьюха как минимум перестанет работать и как максимум пойдёт по женской линии.