Наконец-то портировал модуль календаря по материалам на Drupal 7 (не без финансовой помощи, правда, вот этого человека (namli), а так бы ещё полгода, наверно, портировал)...
Итак, суть модуля:
Простой календарь по материалам, которые можно выбирать либо по дате создания материала, либо по полю типа date (если date установлен, конечно). Если выбор материалов идет по полю, то возможны множественные значения полей (несколько дат на один материал).
Модуль по-прежнему включается как блок и в нем ещё формируется страница типа /calendar/ГГГГ/ММ/ДД для отображения страницы с материалами за выбранный день. Все настройки модуля можно найти в параметрах блока из контекстного меню "Настроить блок". Обновлены по сравнению с версией модуля для 6-ки выборки по типам материалов и поле с датой. Добавлено изменение заголовков событий. Если раньше все материалы назывались событиями, то теперь можно указать, что это будет (записи, новости, события и т.д.)
Добавлена возможность создания отдельных тем оформления календаря. Сейчас там три темы оформления: стандартная, vista и gridy. Стандартная тема тянется по ширине блока, а vista и gridy фиксированной ширины (198 и 182 точки соответственно).
В темы оформления добавлены симпатичные всплывающие подсказки. Добавлены два типа отображения подсказок
Стандартный - при наведении указателя мыши на день отображается количество материалов
Подгрузка ссылок - загружается список ссылок на материалы при наведении указателя мыши на день. Для этого типа можно выбрать количество показываемых ссылок.
В натройках блока:
● селектор типов материалов (не надо писать руками)
● селектор полей с датой (с проверкой на модуль date)
● список тем оформления
● изменение подписей к материалам
● ссылки во всплывающих подсказках
● настройка количества элементов на страницах и в подсказках
Пока только не доделал перевод на английский и файл перевода... а там и на drupal.org выложу
За спасибо, приму копеечки на яндекс.деньги 41001896059641 или заказ на разработку новых модулей )))
UPD от 15 декабря 2011:
обновлен модуль с замечаниями RxB (все кроме темизации html через функцию, всё-таки считаю не нужным, но если найдутся те, кому позарез надо будет, сделаю), поэтому обязательно при обновлении модуля отключите старую версию, так как ряд функций был переименован.
UPD от 16 марта 2012:
обновлен модуль, добавил разделение материалов по языкам, добавил темизацию через .tpl файлы, добавил ещё одну тему оформления и выложил на д.орг (http://drupal.org/sandbox/DmitriyMakeev/1488326)
Вложение | Размер |
---|---|
russian_beauty_calendar.zip | 47.79 КБ |
Комментарии
Круто! Браво! Спасибо!
Спасибо за модуль - нужная вещь. Под 7 симпотный. Пора ставить кнопку donate
Итак.
1.
russian_beauty_calendar_menu()
В параметре title текст оборачивать в t() не требуется.
2.
function rbc_month_to_arg($arg) { return empty($arg) ? date("m") : $arg; }
function rbc_day_to_arg($arg) { return empty($arg) ? date("d") : $arg; }
вы бы хоть префикс в виде имени модуля использовали.
3.
строка 80.
'#description' => 'Выберите тему оформления календаря.',
Коль уж начали по-английски, надо бы и продолжить?
4.
russian_beauty_calendar_block_container()
russian_beauty_calendar_block_content()
почему вы их не сделали функцией темизации?
Юзеры будут изменять HTML на выводе хаком модуля?
5.
foreach ($result as $row) {
print '<li>' . l($row->title, 'node/'.$row->nid) . '</li>';
$counter++;
if ($counter >= $tooltip_count) break;
}
print '</ul>';
что за нах? Есть есть же theme('list') и иже с ними.
6.
Где .install-файл? Кто мусор из системы чистить будет? Пушкин?
1. Спасибо, не знал
2. Не хотелось длинных названий, но придется поменять для д.орга
3. Уже писал, что "Пока только не доделал перевод на английский и файл перевода"
4. Не вижу смысла html редактировать для темизации, всё css-файлами делается свободно, но может поменяю
5. Про темизацию списков знаю, но не хотелось из-за избыточного кода
6. Забылось))) Всё-таки целых 7 переменных)))
Приятно слышать адекватную критику
т.е. (грубо)
$items[] = l($row->title, 'node/'.$row->nid);
}
print theme('item_list', $items)
избыточнее вашего?
foreach ($result as $row) {
print '<li>' . l($row->title, 'node/'.$row->nid) . '</li>';
$counter++;
if ($counter >= $tooltip_count) break;
}
print '</ul>';
Не этот код, а получающийся html-список с классами (menu, first, last и т.д.)
Уговорили))) поменяю
На вид отличный модуль. Перелистывание с месяца на месяц на аяксе?
ога
Красивый календарик.
Добавлю свои 5 копеек:
Вот этот модуль очень даже просится на друпал.орг - могу помочь с аппликейшен ревью, если подадите именно с ним - естественно, поправив все вышеуказанное + сам процесс одобрения может выявить недочеты.
В качестве идеи - сделать отображение тултипов не жестко через tiptip... есть ещё, например, beautytips, которые уже интегрированы с Друпалом и имеют глобальные настройки тултипов для всего сайта + возможность задавать собственные стили в коде через хук.
А он так же как и под д6 на каждое число страницу создает или все же только на ту дату, где есть что выводить?
так же как и под д6 только плюшек прибавилось
При распаковке архива в линуксе файл модуля имеет вид ®¯¨ï russian_beauty_calendar.module
Пришлось тащить в винду и распаковывать там Проверьте названия файлов на русские знаки.
А в целом симпатично, спасибо
а чем от обычного календаря отличается, кроме красивых тултипов?
У меня на юбунте не было такого. Только Thumbs.db файлики.
жаль... а почистить это не было желания?
Valeratal
это просто блок календаря и страницы с материалами... в настройке он гораздо проще calendar'я, а ещё удобная аякс листалка у блока по месяцам)))
P.Selfin@drupal.org">P.Selfin@drupal.org
не понял немного, что именно почистить... страницы он создает по запросу, если запрос не выдает нод, то сообщается об отсутствии материалов за дату
включил, повесил блок, выбрал стиль ему - стиля нет, блок размазан
--
заменил на
а если хочется опций к drupal_add_css, то в семерке они массивом предаются а не как отдельные параметры
спасибо, поправил, забыл поменять при портировании
А как вывести страницу через views? как сформировать адрес страницы /calendar/ГГГГ/ММ/ДД
Можно ли сделать опцию включения маркеров для новостей(статей)? А то при длинных названиях новостей, она переносится на следующую строку и не понятно, то ли там две новости, то ли одна.
P.S. Все уже разобрался. Данную фишку можно сделать, просто поправив css файл.
Осталось залить модуль в песочницу на d.o
При наведении на дату появляется подсказка: количество статей, но при нажатии на дату появляется страница с сообщением : Not Found. The requested URL/calendar/дата not found.
Если стоит тип подстказки "ссылки", то ничего не отображается (точнее, видна серая область и в ней полоса загрузки), тоже при переходе на другой месяц...
Может что-то надо еще указать?
С Drupalом еще на стадии знакомства.
отличная работа! обязательно заюзаю в проектах где потребуется
2 DyxLesa: если можете дать url, где установлен модуль - скиньте, посмотрю. Если сайт на локалхосте у вас, то не подскажу((
2 ibest: спасибо
Большое спасибо! Симпатичный календарик. Но возникла пара проблем:
Подсказки начинают появляется только после того, как щелкнешь по какой-нибудь из дат с новостями. При этом если перейти на другой месяц, то они опять перестают работать (пока опять не щелкнешь по дате с новостью).
При подключении модуля Calendar Tooltips, подсказки опять перестают работать, но на этот раз уже ничего им не помогает(
И еще, подскажите, пожалуйста, по месяцам можно переходить только с помощью навигации "вперед/назад" или как-то можно настроить вывод списка месяцев, чтобы и выбирать там?
Скажите какую ошибку выдает javasctipt в браузере через веб-консоль (если фаерфокс, например)
теперь понял для чего понадобился бы вывод блока через tpl-файл, как говорил RxB... к сожалению, этого пока нет и не знаю будет ли(
При переходе между месяцами выдает
function calendar_prev() { (function (... keepAlive:true}); }); })(jQuery); }
// ну или function calendar_next() { (function (... keepAlive:true}); }); })(jQuery); }
//смотря в какую сторону идти
script.js?lx8gr2 (строка 1)
Это без Calendar Tooltips. И подсказки при этом перестают работать, хотя навигация по месяцам продолжает работать нормально. Если обновить страницу - все работает для выбранного месяца.
добавлено:
если вынести функцию TipTip в какую-нибудь function myTipTip(options) {..}
а при загрузке и на кнопках определять ее
$.fn.tipTip = myTipTip;
то вроде работает нормально.
А еще почему бы настройки не вынести в глобальную переменную
var myOptions = {defaultPosition: "right", maxWidth: "400px", keepAlive:true};
или глобальные это хуже чем копипаст?
Спасибо! Автор добрая душа
Скажите пожалуйста, можно ли к этому модулю сделать показ будущих дат? В настройках вашего календаря это сделать можно с помощью date, но тогда мы теряем "дату создания материала"... Было бы здорово, если это работало вместе.
to albee29: для этого нужно установить множественное значение для даты в нужном поле, и для событий указывать и дату создания и дату события... не очень удобно, но можно)))
А планируется поправка бага с подсказками? ( в текущем месяце подставляются названия материалов, а если пролистать вперед или назад все переходит к виду "2 события")
Скажите, где увидеть можно этот баг (линк, какой браузер), тогда, может, и устраню. Просто у меня во всех браузерах нормально
http://sotraining.com.ua/kalendar.html вот
При попадании на страницу изначально все работает нормально, в подсказке высвечивается название материала. Если сделать щаг в следующий или прошедший месяц, то вместо этой подсказки уже высвечивается количество событий. (Даже если вернутся на текущий месяц где все работало нормально, тоже все ломается) В данном примере, я поставил тестово на 21 число материал, и еще несколько событий в Апреле месяце. Все одинаково не работает во всех браузерах))) так что перечислять их не вижу смысла)
Супер, просто, понятно, работает. Автор - молодец! Надеюсь не посчитают флудом, просто редко встретишь вот такие модули, по-людски сделанные людьми для людей.
Проблемы с перелистыванием и всплывающими подсказками при работе на поддомене вида http://domain.example/subdomain. Опускает /subdomain
+
Поправил работу javascript'а при условии base_path не равного корню сайта...
Спасибо за заметку.
Спасибо! Заработало, но при клике на саму дату ошибка осталась.
Поправил)
Как у вашего модуля с многоязычностью??? есть поддержка???
Какое то время назад ставил по-моему он отображал новости сразу всех языков...
Многоязычности нет. Как-нибудь добавлю.
Многоязычности нет. Как-нибудь добавлю.
Спасибо! будем ждать
Почему-то если я разлогиниваюсь на сайте, то календарь показывает первый месяц этого года. Если логинюсь, то всё нормально — март.
смотрите кеш
А есть возможность редактировать страницу вывода материалов? не могу понять как они выводятся.
Было бы не плохо и год тоже менять, а не только месяц.
В целом модуль отличный! Спасибо!
А когда модуль появится на drupal.org
Не знаю, сам автор не заинтересован, а размещать самому - как-то аморально Выше я предлагал свою помощь в ревью кода для проджект аппликейшенов, вместе со списком исправлений - не получил никакой реакции.
2 veleslab:
Страница материалов выводит все материалы за дату также как это делает стандартный /node.
Про переключение года даже не задумывался, но вещь могла бы быть иногда полезной (добавлю в заметки для будущей опции)
2 duozersk и IRONFELIX:
извиняюсь, что до сих пор не выложил... просто хотелось переделать чуть-чуть (благо новые идеи вы постоянно добавляете), но со временем туговато, как и у всех
Обновил модуль, добавил разделение материалов по языкам, добавил темизацию через .tpl файлы, добавил ещё одну тему оформления, поправил мелочи и выложил на д.орг (http://drupal.org/sandbox/DmitriyMakeev/1488326)
Спасибо. Круто работает. При отображении используется стандартная форма с файла node.tpl.php.
У меня есть вьюшки затемизарованные под мои задачи как необходимо. Можно-ли как-то добавить еще один путь для стандартной вьюшки "Taxonomy term", чтобы и по терминам таксономии(taxonomy/term/%) и по адресу вывода материалов за день модулем "Календарь"(calendar/) выводились одной и той же вьюшкой? Подскажите альтернативный путь, либо какую вьюшку создать для данного пути?
Это вам проще в самом представлении выбирать материалы
Вы вообще поняли что Вы сказали? Речи не идет о материале. Читайте внимательней.
О! Вечером попробую использовать у себя в газете Кстати язык я так понял можно другой подцепить уже через ро?
Если кто-либо сталкивался с переопределением адреса для вьюса подскажите пожалуйста.
Подсказки со списком материалов не пропадают, если после их появления курсор мыши не попал на них, даже если курсор увести с календаря. Так и остаются некрасиво висеть на календаре, даже если скролировать страницу ниже, пока специально мышкой по нему не проведешь.
Спасибо за модуль, пришёлся очень кстати. Я его, правда, уже "раздербанил" под свои нужды, так что с обновлениями несовместим
А вообще, если интересно, то у меня была такая задача: исторический календарь, т.е. нужно показывать ноды с полем типа date, которые совпадают с днём и месяцем любого года. Иными словами, если я ткну на календаре 21-го марта 2012, то хочу увидеть все события, произошедшие 21-го марта в разные годы. Соответственно, и адрес страницы выглядит как /calendar/ММ/ДД.
Кстати, из-за того, что даты обрабатываются в формате Timestamp, модуль не находит даты старше начала эпохи UNIX. Решил использованием класса DateTime, однако, не всем это подойдёт из-за ограничения версии PHP: например, метод DateTime::createFromFormat появился только в версии 5.3.0
Проверял дизайн сайта с anonymouse.org(Прокси-сервер) и увидел как отображается календарь. При авторизированном пользователе(проверял только с администратора) отображается так как хотелось, но когда заходишь на сайт как Гость - то календарные дни отображаются в столбик. Проверял роли - бесполезно. Подскажите пожалуйста.
Нужна ссылка на сайт или ошибки, которые показывает консоль. Без них помочь не смогу. Скорее всего стиль оформления не цепляется.
Сайт поднят недавно. если есть какие замечания - прошу.
Да, конечно - http://iftech.ru
зашел гостем все нормально анонимайзер может режет?)
У вас не подключились таблица стилей и скрипты (.js и .css файлы). Попробуйте отключить кеш css и js и посмотрите снова. Или попробуйте обновить кеш.
Здравствуйте.
у меня есть несколько вопросов.
Практически на чистый сайт добавил ваш модуль. (скопировал всю папку в "sites/all/modules/" )
добавил блок в нужную область.
календарь сразу высветил даты когда добавлялся материал, при переходе я получал 404 по адресу(/calendar/2012/03/25)
при настройке блока увидел сообщение о недостающем модуле Date.
поставил Date, включил Date и DateAPI.
Создал материал. но никаких изменений все тотже 404
ни каких каталогов не создается(должны ли??)....
подскажите как решить, что где включить и настроить...
ссылку дать не могу, сайт пока на локалхост
Он у вас пишет "Материалы не найдены" или всё же 404 ошибку выдает? Если 404, то попробуйте обновить модуль и сбросить кеш.
Доброго времени суток! Прежде всего, огромное спасибо за модуль!
У тех у кого отключены чистые ссылки, будет выдаваться 404 ошибка, т.к. ссылки даты ссылаются на /calendar/YYYY/MM/DD а не /?q=calendar/YYYY/MM/DD
Решается это либо включением чистых ссылок, либо если это не возможно, то вручную правится в файле "russian-beauty-calendar-day.tpl.php" в 23й строке дописанием слева к calendar/ на ?q=
В итоге получаем ?q=calendar/
Предлогаю это вынести в настройки, либо проверку повесить на включеность чистых ссылок.
У меня аналогичная проблема, тоже не перелистывает по месяцам, в чем может быть проблема? Очистка кэша не помогает.
У меня аналогичная проблема, тоже не перелистывает по месяцам, в чем может быть проблема? Очистка кэша не помогает.[/quote]
Присоединяюсь - та же проблема - бесконечная анимация - отпишитесь пожалуйста кто решил проблему
Вопрос такой: нельзя ли этот календарь немного доработать?
Для использования его в электронных версиях печатных СМИ (газет). Дело в том, что у печатного периодического издания есть номер и дата выпуска (обычно, такого формата: "РГ" № 77 (1675) от 27.03.2012). Идея такая: при размещении материала в электронную версию, например газеты, к той или иной статье, помимо даты, чтоб была возможность присвоить порядковый номер газеты... Нужен небольшой блок над Вашим календарем, где вместе дат (чисел и месяцев) указывались бы № газет (например, 77 (1675), 78 (1676) и так далее)... Наведя курсором на тот или иной номер газеты, пользователь видит список опубликованных в данном номере газеты материалов...
Доработать можно)
Но нужна ли информация такого рода посетителям сайта? Не проще у самих статей сделать поле термина таксономии и в нем задавать выпуск, в котором была опубликована статья?
есть еще вопрос.
календарь не переходит по месяцам. после нажатия на смену месяца бесконечная анимация полосы загрузки.
и можете дать ссылку на рабочий календарь (хочется сверь генерируемый HTML)
У меня календарь без проблем работает: teleckoe.info - посмотрите тут
Для электронных версий печатного СМИ очень нужна...
1) На сайте нужен некий такой симпатичный блок, где была бы возможность выбора дней, месяца, года, и при выборе этих параметров на дополнительном окошке (помимо окошка дней) появились бы номера выпусков: 77 (1675), 78 (1676) и так далее...
И по аналогии с Вашим календарем, при наведении курсора на тот или иной номер выпуска, высвечивались бы названия статьей (материалов), опубликованных в данном номере, а при нажатии на номер - на главной странице сайта появились анонсы этих статьей...
То есть задумка такая:
- сделать некую такую визуальную поисковую форму в форме календаря, чтоб посетитель примерно зная: или номер выпуска, или месяц и год публикации той или иной статьи, мог быстро найти нужный ему материал...
2) Чтоб при публикации статьи на сайте в параметрах публикации можно было бы присвоить именно тот номер и дата выпуска бумажного СМИ, в котором эта статья опубликована...
Как лучше все это реализовать, Вам, веб-кодерам и программерам, виднее... Я же всего лишь потребитель готовых разработок и решений, с помощью которых на досуге занимаюсь сборкой сайтов... Сделаете? Могу взнос DONATE внести...
Прочитал ваше сообщение несколько раз, но так и не смог себе представить, как это может выглядеть...
Номер выпуска можно сделать полем для материала, и группировать материалы по этому полю как по тегам. Но не пойму как визуально это можно совместить с календарем.
Нужно, чтоб визуально выглядело примерно так, как в прикрепленном рисунке...
и чтоб:
1) при наведении курсора как на дату, так и на номер выпуска, выдавался список материалов данного номера...
2) при смене месяца календаря в разделе "Номера выпусков" отображались только номера выпусков только данного месяца.
То есть нужен более расширенный календарь, с отображением номеров выпусков (которые привязаны к той или иной дате)...
Представляю так: при размещении того или иного материала на сайте СМИ, помимо даты (которая, как правило, присваивается автоматически, исходя из текущей системной даты сервера сайта или вручную), вручную в специальной доп.графе данного типа материалов указывается номер выпуска (текущего года и нарастающим за все годы)... Вот этот номер и надо вывести в календаре дополнительно...
Привет, поработаю с удовольствием над переводом на литовский язык!
Вопрос по настройкам - может можно включить в следующию версию такую штуку как инверсия выборки?
Сейчас можно показывать "все" или "выбранное"+кнтрл, в моем случае много типов материалов (да знаю что криво сделал но еще работаю над оптимизацией) и вот пригодилась бы опция "все кроме отмеченных"
У меня вот только объявления исключить хочется, а типов статей за 20... и они постоянно меняются - и каждый раз приходиться лазить в настройки селектить...
@Kvark: согласен, полезная будет функция, реализую.
супер! Мне кажется хватило бы добавить чек бокс "инвертировать выбор" и если он чекнут то срабатывает инверсия...
Добавил инверсию выбора типов материалов. Обновил здесь и на д.орге.
Спасибо за оперативность!
Можно еще попросить расширить список правил по склонению? Мне не хватает
Мне кажется это не только в литовском варианте, но и в русском: 1 статья, 2 статьи, 7 статей... или я не умею сконфигурировать?
так он расширенный, в русском переводе это указано, в английских настройках этого нет
просто в склонениях надо написать "событие, события, событий" и он будет их склонять
Скорее там тупой хардкод, если выводить через l(), то она подставит нужное
Здравствуйте. Отличный модуль!
Возможно ли внести следующие изменения?
1.
при выборе вывода списка новостей, добавить возможность самостоятельно описать то, из чего должны состоять пункты. Т.е. сейчас это всегда заголовки, но было бы здорово, если бы это было что угодно (тизеры, или комбинация различных полей). Сейчас для этого приходится менять код с:
на
...
function myRenderRow($nid){
/*
создания подходящего вида для отдельного пунтка
например тизера, или сборки из разных полей
*/
return $strNode;
}
Наверняка удобней, если бы эту функцию можно было описать в php-поле с поддержкой переменной $nid на странице с настройкой календаря.
2.
Вывод материала по полю типа Дата не работает для форматов Unix timestamp и ISO format. Приходится переписывать запросы на выборку и сравнение времени. Если бы они поддерживались в модуле, а выбор того, какой из них использовать производился на странице с настройкой модуля в раскрывающемся списке, было бы круто!
Спасибо!
vaplas: Спасибо.
1. Думаю как время появится на д.орге допилю и хочу сделать селект для выбора отображения материалов (только ссылка, тизер, маркер и т.д. как это есть на странице настройки отображения типа материала), но это повтом)))
2. А можно подробнее, где вы указываете эти форматы, просто и на локалхосте под виндой и на серваках под никсами все в норме. Скажите, как сделать так, чтобы не работало)
dylan, извините, на счет ISO format погорячился, он работает.
Но вот с полями формата Date (Unix timestamp) по-прежнему не получается
Доступ к тестовому сайту кинул в личку.
Еще заметил такой глюк, что почему-то при включенном режиме "Кеширование блоков" (Cache blocks, /admin/config/development/performance). Для анонимных пользователей перестают подключаться таблицы стилей.
Попробовал переправить код для Unix timestamp (russian_beauty_calendar.module)
<?php
строка 388
[(int) date('d', strtotime($row->$field_name))]++;$day_nids
на
$day_nids[(int) date('d', $row->$field_name)]++;
строка 586
$select->where('DATE(' . $field_name . '_value) = :date',
array(':date' => date('Y.m.d', $date)));
на
$select->where('FROM_UNIXTIME(' . $field_name . '_value,\'%Y.%m.%d\') = :date',
array(':date' => date('Y.m.d', $date))); строка 655
$select->where('DATE_FORMAT(fd.' . $field_name . '_value, \'%Y%m\') = :stamp',
array(':stamp' => date('Ym', $date)));
на
$select->where('FROM_UNIXTIME(fd.' . $field_name . '_value, \'%Y%m\') = :stamp',
array(':stamp' => date('Ym', $date))); ?>
заработало, но только на половину (в календаре дни отмечаются, но при наведении на одни из отметок выводится "Error", хотя при наведении на другие - все хорошо).
Вот пример: http://test.infine.me/
Все новости в июне показываются нормально, кроме 7-ого числа. И так в каждом месяце находится такие ошибочные.
Полностью подделав обработку Unix stamp под алгоритм вывода даты создания (которая тоже в этом формате) кажется удалось добиться того что надо.
Т.е. так:
строка 388
<?php
$day_nids[(int) date('d', strtotime($row->$field_name))]++;
?>
на
<?php
$day_nids[(int) date('d', $row->$field_name)]++; ?>
строка 586
<?php
$select->where('DATE(' . $field_name . '_value) = :date',
array(':date' => date('Y.m.d', $date)));
?>
заменить на
<?php
$select->where($field_name . '_value >= :dateL AND '.$field_name . '_value < :dateR', array(':dateL' => $date, ':dateR' => ($date+86400))); ?>
строка 655
<?php
$select->where('DATE_FORMAT(fd.' . $field_name . '_value, \'%Y%m\') = :stamp',
array(':stamp' => date('Ym', $date)));
?>
заменить на
<?php
$dateL = mktime(0, 0, 0, date('m', $date), 1, date('Y', $date));
$dateR = mktime(0, 0, 0, date('m', $date) + 1, 1, date('Y', $date));
$field = 'fd.' . $field_name . '_value';
$select->where( $field.' >= :dateL AND ' . $field . ' < :dateR', array(':dateL' => $dateL, ':dateR' => $dateR));
?>
vaplas: Спасибо. Обязательно добавлю.
как добавить класс active к активному числу?
При включении настройки " Кэширование блоков", почему то не подгружаются JS & CSS файлы модуля, можно ли это как то исправить?
Если да, то могли бы вы выложить отдельно, не через git.
Спасибо за модуль
Решение проблемы с кешированием блоков.
Т.е. в файле russian_beauty_calendar.module изменить функцию russian_beauty_calendar_block_view на такую:
<?php
$theme = variable_get('russian_beauty_calendar_theme', 'round');
$m = date('m');
// $block['subject'] = t('Calendar');
$block = array
function russian_beauty_calendar_block_view($delta = '') {
//drupal_add_css(drupal_get_path('module', 'russian_beauty_calendar') . '/themes/' . $theme . '/calendar.css');
//drupal_add_js(drupal_get_path('module', 'russian_beauty_calendar') . '/themes/' . $theme . '/script.js');
$y = date('Y');
if (
arg(0) == 'calendar') {if (arg(1) > 0) {
$y = (int) arg(1);
}
if (arg(2) > 0) {
$m = (int) arg(2);
}
}
if (
arg(0) == 'node' && arg(1) > 0) {$type = variable_get('russian_beauty_calendar_node_type', '');
$node = node_load(arg(1));
if (($node->type == $type && $type != '%') || ($type == '%')) {
$m = date('m', $node->created);
$y = date('Y', $node->created);
}
}
// $block['content'] = '<div id="calendar-body">' . russian_beauty_calendar_block_content(mktime(0, 0, 0, $m, 1, $y)) . '</div>';
(
'subject' => t('Calendar'),
'content' => array
(
'#markup' => '<div id="calendar-body">' .
russian_beauty_calendar_block_content(mktime(0, 0, 0, $m, 1, $y)) .
'</div>',
'#attached' => array
(
'js' => array(drupal_get_path('module', 'russian_beauty_calendar') . '/themes/' . $theme . '/script.js'),
'css' => array(drupal_get_path('module', 'russian_beauty_calendar') . '/themes/' . $theme . '/calendar.css'),
),
),
);
return $block;
}
?>
При включении флажка "Separate nodes by language" и открытии страницы все нормально. Интерфейс на нужном языке. Однако при листании месяца, интерфейс переключается на язык по умолчанию, а с ним и выводимые в конкретной дате названия нод.
А как темизировать вывод материалов при выборе дня? Путем редактирования файла node.tpl.php?
да, календарь выводит тизеры материалов
спасибо за модуль.
не знаю, баг или не доделано:
В настройках календаря в выпадающем списке Date field, выбираю созданное мною поле(тип поля - дата). Это поле состоит из даты начала и даты окончания. Ы блоке календаря подсвечивается только дата начала, а сам временной промежуток нет.
Модуль не показывает дату окончания, только даты начала. Поле даты может иметь несколько значений.
dylan
А где можно взять последнюю версию календаря? У той которая прикреплена к данной теме в теме оформления Round небольшой глюк, если в текущий день были статьи то значок полностью закрашен синим.
pr0g: Спасибо, в следующем коммите поправлю css в теме round. А последнюю версию можно взять на d.org в моей песочнице http://drupal.org/sandbox/DmitriyMakeev/1488326 открыть Repository viewer (http//drupalcode.org/sandbox/DmitriyMakeev/1488326.git) и кликнуть справа на ссылку с текстом snapshot. Модуль поменял название на Pretty Calendar, так как Russian Beauty Calendar ассоциируется как минимум с календарём с обнаженными русскими красавицами
dylan
Скачал я последнюю версию с песочницы и заметил что названия месяцев на английском языке, хотя дни недели отображаются на русском. В версии что прикреплена к данной теме название месяца на русском языке.
там переводить надо через перевод интерфейса... пока что модуль в песочнице перевод с модулем размещать нельзя, а localize.drupal.org не даёт добавлять перевод пока модуль не опубликован.
А в старой версии вроде было на русском или там было в коде написано по русский?
там перевод немного другой был
Для полных названий месяцев в ядре предусмотрен специальный контекст (пример) - его и нужно использовать, а делать заглавные буквы нужно посредством css
Подскажите, в чем проблема. Поставил модуль, настроил для отображения статей и новостей на сайте.
Путь calendar/YYYY/MM/DD переопределил с помощью views. Всё работает отлично. Но на страницах просмотра по дате через календарь, вылетает вот такая ошибка:
Notice: Undefined index: localized_options в функции menu_navigation_links() (строка 1858 в файле /var/www/omsk/httpdocs/includes/menu.inc).
Раньше такого не было, поиск не дал результатов. Спасибо. Модуль классный.
модуль хорош, но есть вопрос - можно ли ему указать, чтобы показывал определенный контент в зависимости от групп? Модуль Organic Groups использую. Сейчас отображает контент всех групп, а надо только те материалы, которые принадлежат группе, куда входит пользователь.
Спасибо за идею. Такое пока не предусмотрено. Добавлю в список возможных дополнений. Как-нибудь сделаю, но скоро не обещаю.
Спасибо автору!
хорошо бы еще, чтобы можно создавать сколько угодно блоков, под каждый раздел сайта, например. и соответственно в каждом таком блоке вместо /calendar/ГГГГ/ММ/ДД что то свое, типа design/ГГГГ/ММ/ДД photo/ГГГГ/ММ/ДД и прочее. была бы вообще конфетка
Проблема опять-же в чистых и грязных ссылках.
(Интересно что в calendar-day.tpl.php (pretty_calendar-7.x-1.x-dev) есть проверка на чистость ссылок и все бы работало вот только вместо "?q=" он вставляет "q?=".)
Так вот если у вас грязные ссылки, то вы скорее всего не можете перелистывать месяца, чтобы решиь эту проблему
найдие функцию calendar_go(в pretty_calendar-7.x-1.x-dev она в файле pretty_calendar.js), и добавьте опять же
"?q=" в строку "$.get("?q="+Drupal.settings.basePath + "calendar_get/" +....."
Проблема опять-же в чистых и грязных ссылках.
(Интересно что в calendar-day.tpl.php (pretty_calendar-7.x-1.x-dev) есть проверка на чистость ссылок и все бы работало вот только вместо "?q=" он вставляет "q?=".)
Так вот если у вас грязные ссылки, то вы скорее всего не можете перелистывать месяца, чтобы решиь эту проблему
найдие функцию calendar_go(в pretty_calendar-7.x-1.x-dev она в файле pretty_calendar.js), и добавьте опять же
"?q=" в строку "$.get("?q="+Drupal.settings.basePath + "calendar_get/" +....."
Вот решение !)
Я бы заказал у вас доработку, нужно выводить выпадающее меню с выбором года, чтобы не кликать по 12 месяцев для навигации по архиву по годам.
Если попытаться открыть на сайте несуществующую ноду, то вываливается ошибка. Чтобы ошибка не вываливалась, нужно поставить проверку на существование ноды, у которой берутся свойства. Для этого в файле pretty_calendar.module необходимо заменить строку 252 с
if ($use_all || (in_array($node->type, $types) && !$use_all)) {
на
if (($use_all || (in_array($node->type, $types) && !$use_all)) && (!empty($node))) {
Супер модуль, спасибо, оч пригодился
А у меня не работает листалка - все заголовки с тизерами вываливаются на одно страницу. Особенно печально, когда без даты просто http://my_sit/calendar. (((
Ставлю разное "количество на страницу" в настройках блока, но толку никакого.
Очень нужен ваш совет. МОДУЛЬ-СУПЕР все работает, ошибок не выдает,
но он выводит только часть информации, из-за этого пока нельзя его использовать. Есть Contextual filters: дата начала события start date (field_date) и дата окончания (field_date:value2)). Долго настраивал, но в календарике выводит только дату начала события. Соответственно, если у меня пять событий каждое по 5 дней (кино) то на календаре у меня всего пять дат, а должно быть больше.
Очень прошу подсказать направление. Спасибо заранее
Добавил поддержку диапазонов дат (патч). Включение и отключение обработки диапазонов дат производится в настройке блока календаря (чекбокс "Use date range")
Пример:
пруфлинк
Еще предлагаю изменить javascript для тултипов, т.к. сейчас чтобы они исчезли нужно навести на них курсор, а потом увести. Поэтому если курсор вообще не наводить на всплывшую подсказку - она подвиснет.
Решение: убирать тултип если курсор убран с ячейки дня, и при этом не наведен на сам тултип в течении дельты времени, например, 0.3 с (патч)
Еще предлагаю добавить возможность отображать неопубликованные материалы. Нужно, чтобы выводить материлы для пользователя, которые скрыты от поисковика путем непубликации.
Еще, может в rel вместо даты выводить список nids. Потому что врядли существуют дни, связанные с сотней новостей, а вот если на сайте тысяч десять новостей, и каждый раз при наведении фильтровать их по дате - будет затратно.
Помню автор хотел добавить выбор между тайтлом, тизером и т.д. а также php поле для задания собственного вывода. Но что-тот так и не добавил. Для наглядности пользы от этого:
Что там с настроечкой для Unix timestamp ?)
Если что, готов оказать посильную помощь. Спасибо за внимание
upd: подправил патч с диапазоном дат (а именно косяк, если начало диапазона было в прошлом месяце)
пропатченные файлы
добрый. спасибо за модуль!
после того, как пропатчил появился глюк. когда загружается показывает название события, но после того, как поменяешь месяц показывает "1 story". похоже в js ошибка где-то. в настройках стоит показывать линк к ноде.
А как русифицировать месяцы?
конфигурация-регион и язык-перевод интерфейса.
ищешь название месяца и вбиваешь ему перевод.
искал там уже...не находится ничего!
Вот на скрине видно, что результаты поиска отсутствуют, а под оверлеем сам календарь
sdm98, если речь об этом патче, то не знаю чем помочь, у меня при листании все ок. Давай ссылку, вдруг чего увижу.
xSPiRiTx, "March" а не "MARCH", это ж не аббревиатура
to xSPiRiTx
Заранее спасибо!
патч, который задаёт диапазон дат.
вот сам сайт с календарем. http://ideal-aesthetics.ru/novosti справа "календарь мероприятий". март открывается нормально. а апрель или февраль ужу глюки. возвращаешь назад на март, та же хрень.
ЗЫ. можете выложить полностью пропатченный модуль. у меня второй патч, где исчезает надпись ругнулся.
sdm98, проблема именно в js файле, т.к. не подгружается tipTip. Пропатченные файлы. Наверное достаточно будет поменять только .js (+ чистка кеша).
файлы обновил. кэш почистил. не помогло ((((((
При переходе по месяцам вылазит ошибка:
Но сильно сомневаюсь, что в этом виноват патч. Возможно она появилась раньше, просто не заметил. Проверь без патча, если она исчезнет - тогда буду ломать голову, иначе сам вспоминай, чего там навертел.
На тестовом сайте с которого сделаны патчи и взяты файлы - таких проблем нет
фигня какая-то (((
на локале развернул чистый друпал. поставил date+pretty_calendar, создал тип материала. всё работает.
этот же модуль копирую на рабочий сайт, чищу кэш сайта, кэш броузера, и не работает (( что может быть? от каких-то модулей он может зависеть?
победил костылём. всем спасибо. некрасиво. но работает.у меня дважды jQuery подключается...
проблема такого плана сайт на английском всё хорошо поставил календарь всё нравиться кроме одного если нажать след месяц и в настройках язык по умолчанию стоит русский то месяцы и дни на русском и также наверно с надписью story,stories
Прошу помощи с многоязычным сайтом...
есть сайт с несколькими языками (по умолчанию русский). Нужно чтобы для каждого языка отображались свои новости (обычно новости добавляются через переводы русских новостей). В настройках блока календаря стоит галочка "Разделять материалы по языкам", но отображаются почему то только новости на русском
У меня та же проблема... Напишите, удалось ли Вам ее решить
У меня проблема с использованием colorbox. Хочу при формировании ссылок в календаре, чтобы при клике на дату страница 'calendar/yyyy/mm/dd' или ссылка на ноду 'node/[nid]', нода выводилась в сплывающем colorbox, для этого добавляю класс ссылке "colorbox-load", но нода все равно открывается в этом же окне, а не в попапе. пробовал также использовать попап через модуль modal forms, но все равно происходит переход на страницу, а не попап
Кто знает почему не применяются темы к календарю ((( .... блок отображает просто даты в строчках и все ! Как прикурить темы оформления ? (drupal 7.24 jQuery 1.7.1)
классный модуль.
тут в комментариях писали о том, что материалы на страницах выбранных дат отображаются тизерами, и якобы надо править файлы темы. А кто-нибудь пробовал вывести эти материалы через представления?
создавайте представления страниц и указывайте такой путь: /calendar/%/%/%
у меня все четко работает, правда отображается материал за все время.
Подскажите как настроить фильтр, чтобы отображался материал за 1 день?
Вот наконец добрался до реального применения этого календарика ) был очень удивлен что сабж не понимает дату в формате unix, тоже касается и патча на диапазон дат. Если для кого то актуально, могу написать инструкции по фиксу, и не мешало бы автору самому внести правки в след. итерации
Календаарь работает!!! но есть одина проблема! когда мы выбираем дату нынешнего месяца, события данного числа выдаются так как и должны, но когда мы начинаем перелёстывать месяца, то в адресной строке выдает такой адрес: http://xxx.ru/calendar_get/?q=calendar/2013/12/17,
а нам нужен http://xxx.ru/?q=calendar/2013/12/17, соответственно css стили не применяются к данной страници, подскажите как это исправить. заранее спасибо!
Люди подскажите как сделать свое оформление для страницы /calendar/YYYY/MM/DD ?
Делал через views путь страницы /calendar/%/%/%
но тогда при переходе на страницу, никакой привязке к дате нет, выводятся все материалы, а не привязанные к дате.
- используйте аргументы views
- более разумный метод, используя hook_menu_alter сформировать новый список собственной функцией
- также можно темизировать отдельные элементы используя node.tpl.php или node--ТИП_НОДЫ.tpl.php, это самый простой вариант
* на всякий случай поясняю, что для двух последних вариантов views не нужен
1. Какой именно аргумент нужно использовать?
2. Почитаю об этом.
3. Темизация node--ТИП_НОДЫ.tpl.php темизирует ноду при открытие, но не вывод, который выдается на calendar/YYYY/MM/DD.
Если в node.tpl.php сделать
<?php
if ($node->type == 'MyType'): ?> Новый вывод <? else: ?> Обычный вывод <? endif; ?>
То да, переопределяется.
точно не скажу, давно views не использовал, есть чтото вроде Year, Month, Week
Календарь отличный. Хорошая замена той срамоте, что есть сейчас по стандарту. Радует. Спасибо за работу. Готов вложиться лишь бы модуль был быстрей завершён.
Здрасти .....
Я стесняюсь спросить: как его установить, чтобы он появился на сайте? Я вроде модули все поставил, все ошибки исправил, всё активировал, настройки все провёл .... А календаря нет.
Я даже специально новую публикацию сделал чтобы что то появилось. А календаря нет.:(
Скажите, как можно для определенных пользователей разных ролей сделать, чтобы на календаре отображались только события(в моем случае заявки), закрепленные за этим пользователем, а другому пользователю-другие заявки? Спасибо.
Спасибо большое)
Как у вас настроено распознование языка на сайте?
по префиксу пути
UPD: и правда... похоже, дело в том, что модуль формирует ссылки не учитывая префикс, соответственно они верны только для языка по умолчанию...
может кто подскажет как исправить пока я сам искать буду?
Доброго времени суток!
При использовании модуля в один календарь вывожу даты двух типов материалов (новости и события). Проблема в том, что нужно выводить кастомные даты (field_news_date и field_event_date). Можно ли сделать множественный выбор для полей даты или каким образом можно кастомизировать?
Какая активная тема!
Я тоже хочу настроить ваш модуль russian_beauty_calendar
но у меня не получается:
у меня материалы типа Праздник имеют поле date без установки года, то есть год равен 0.
я не могу понять где в коде изменить чтобы выбирались материалы с годом 0, а не 2014 как нажимает пользователь.
как вообще год отключить?
вот часть кода со строки 557 в файле russian_beauty_calendar.module
<?php
// Check if field was deleted.
// Select nodes without date field.
function russian_beauty_calendar_select_nodes($date = 0, $links_only = FALSE) {
global $language;
$field_name = variable_get('russian_beauty_calendar_field_date', '');
$node_types = explode(',', variable_get('russian_beauty_calendar_node_type', ''));
if (field_info_field($field_name) == '') {
$field_name = '';
}
$select = db_select('node', 'n')
->fields('n', array('nid', 'title', 'created'))
->condition('n.status', 1);
// Multilanguage condition.
if (variable_get('russian_beauty_calendar_separate_languages', FALSE)) {
$select->condition('n.language', $language->language);
}
// Check date.
if ($date > 0) {
if ($field_name == '') {
$select
->condition('created', $date, '>=')
->condition('created', $date + 86400, '<');
}
else {
$select->distinct();
$select->leftJoin('field_data_' . $field_name, 'fd', 'fd.entity_id = n.nid');
$select->fields('fd', array($field_name . '_value'));
$select->where('DATE(' . $field_name . '_value) = :date', array(':date' => date('Y.m.d', $date)));
}
}
// Check types.
if ($node_types[0] != '') {
if (variable_get('russian_beauty_calendar_node_invert', FALSE)) {
$select->condition('n.type', $node_types, 'NOT IN');
}
else {
$select->condition('n.type', $node_types, 'IN');
}
}
$select->orderBy('n.sticky', 'DESC')
->orderBy('n.created', 'DESC');
if (!
$links_only) {$select->extend('PagerDefault')
->limit(variable_get('russian_beauty_calendar_node_per_page', '20'))
->addTag('node_access');
return $select->execute()->fetchCol();
}
else {
$select->addTag('node_access');
$result = array();
foreach ($select->execute() as $row) {
$result[] = $row;
}
return $result;
}
}
?>
как правильно изменить выборку select на строке 586 чтобы год выбирался равным нулю
$select->where('DATE(' . $field_name . '_value) = :date', array(':date' => date('Y.m.d', $date)));
реально дата праздника в бд выглядит так для 8 марта:
0000-03-08 00:00:00
и 8 марта должно показываться каждый год в календаре.
Как дублировать блок с календарем?
Например, на странице Новостей, надо чтобы он показывал календарь "новостей", а на странице других материалов - показывал календарь для других типов материалов соответственно.
По дефолту ведь только 1 модуль, который можно настроить на определенный тип/типы и всё?
Здравствуйте, Подскажите есть ТЗ как его лучше реализовать писать модуль или есть готовое простое решение? Очень нужен совет.
Создание маленького сайта на Drupal 7
site dedicated to our pets.
1. The system users are pet-owning employees.
2. “Pet” content type should hold the following fields (all required):
Name, Owner, Year of Birth (input field – not select list), Type (dog, cat, fish…)
3. The admin is the one who creates the users and the pets.
4. create:
a. 2 users: employee 1 named “Henzel” and employee 2 named “Gretel”
b. Their pets:
i. “Rex” the dog belongs to “Henzel”
ii. “Rocko” the cat and “Fonzi” the fish belong to “Gretel”
5. The homepage uses panels, and should show a view block of the 2 newest pets (show name and type) on the site.
6. When saving pet node (in Drupal admin area), do the following validation (using a hook): if the year of birth is an even number, don’t allow save and show the following error: “Pets are never born on even years”
Т.е. грубо говоря сайт где есть два хозяина у животных, где можно добавлять животных(указывая вид животного, дату рождения и хозяина), только администратор может создавать пользователей, создать двух пользователей у которых есть у одного собака, у другого кот, Панель пользователя, и блок в котором будут отображаться два новых добавленных животных. сохраняя нового животного в админ панеле, если год рождения животного четный вывести ошибку.
Заранее спасибо.
>> писать модуль
"если год рождения животного четный вывести ошибку" - обычно подобные вещи реализуется собственным модулем
но для самых ленивых можно найти альтернативное решение, в данном случае field_validation
с остальным аналогично
>> есть готовое простое решение
друпал сам по себе уже является готовым решением
всё описанное реализуется прямо из "коробки" путем не хитрых манипуляций с полями, типами материалов и профилем пользователя
потребуется ещё модуль references
>> Создание маленького сайта на Drupal 7
если это какая то студенческая задача, то вам должно быть видней как и что использовать
Спасибо, можете помочь с инструкциями по написанию собственного модуля?
Спасибо, можете помочь с инструкциями по написанию собственного модуля?
много инструкций писать придётся
воспользуйтесь поисковой системой по интернету и этому сайту
поищите как создать свой модуль, как изменить существующую форму - в данном случае форму создания материала (подсказка hook_form_alter), как сделать свою валидацию (подсказка свойство #validate)
всё есть, главное не полиниться найти и прочитать
Модуль который инсталируется создал, простой вывод отображается в друпале на главной странице, теперь вопрос, внесение данных о питомцах должен делать только админ сайта, как реализовать в собственном модуле, чо бы у него была своя страница в которой админ сайта вводит данные?
Проблема модуля в том, что он прописывается в хлебных крошках и на сайте появляется страница, на которой вывален весь контент сайта за раз. Из-за этого растёт нагрузка и портится индексация.
Есть ли усовершенствованная версия данного календаря, чтобы можно было выбирать дату отдельно по годам и месяцам. примерно как на картинке
Всем доброго времени суток!
Пишу заранее, что в работе с Drupal я очень-очень новенький новичок
Вопрос следующего характера: на сайте установлен модуль, описанный выше, pretty calendar. Все публикации на конкретную дату подтягиваются отлично. Блок отображается при открытии любой страницы. Но! не показывает текущую дату. Т.е. календарь открывается на той дате, когда страница была создана.
Например: я открываю страницу, которая была опубликована 14 августа 2014 года, и календарь открывается на августе 2014; перехожу на страницу, дата публикации которой 5 марта 2015 - календарь тоже открывает на марте 2015.
Помогите, пожалуйста.
Подозреваю, что вопрос из разряда глупых...
Буду благодарна за дельные советы
P.S. за умные ответы на глупые вопросы:):):)
В файле pretty_calendar.module закомментируйте следующие строки:
$types = explode(',', variable_get('pretty_calendar_node_type', ''));
$use_all = in_array('', $types);
$node = node_load(arg(1));
if ($use_all || (in_array($node->type, $types) && !$use_all)) {
$m = date('m', $node->created);
$y = date('Y', $node->created);
}
}
Огромное СПАСИБО за ответ.
Работает:)))))
Удачного дня!
Здравствуйте!
Спасибо за отличный модуль!
Но возникла не большая проблема - названия месяцев выводятся на английском, при этом дни недели на русском. Хотелось бы что бы выводилось все на русском. Что надо подправить?
Ага, прочитал предыдущую страницу комментариев
Перевел в ручную.
Еще раз спасибо за модуль!
подскажите как сделать отображение месяца на русском языке?
попробуй добавить переводы
Привет, очень надеюсь что тема еще жива. Установил календарь, все отлично, кроме одного момента, как видно на скрине, те даты где есть материал не отображается, но если навести вплывает окно с линком, как решить данную проблему ? + как сделать что при нажатие на дату он не ввел на http://мой сайт/calendar ?
Через hook_preprocess_ & theme_ , гайд по теме https://www.drupal.org/docs/7/theming
Спасибо за оперативный ответ. Можно чуточку подробнее, смотрю на инфо. по линку и как то ничего не могу понять.
В модуле есть функция темизации function pretty_calendar_theme
в ней определены темные шаблоны.
Шаблоны типа pretty-calendar.tpl.php Вы можете кинуть себе в тему и переопределить
Вызываются они через например theme('pretty_calendar'
простите мое невежество, но как вызвать, в каком файле. Неделю уже мучаюсь с этим календарем
В файле template.php своей темы функцию назвать <название Вашей темы>_pretty_calendar
Да не хватает, не заметил, скорей всего css поможет, переключите на тему bartik и проверьте там?!
Вы совершено правы! все дело в CSS было, он на эти даты ставил opacity: 0; + position: inherit; надо было указать ) теперь все отлично. Спасибо Вам за помощь.
Почему-то не на всех темах работает. Долго мучился, не мог понять: не отображает дни, где есть материалы. Из-за этого все клетки смещаются и календарь вообще становится неправильным. Смотрел в CSS и не понял, какого рожна им надо. Потом понял, что такое поведение получается в теме bootstrap 3. При этом ссылки там где-то есть, сплюснутые. Если при этом у a class="tooltip" убрать свойство display: block и posotion: absolute, то все отображается нормально. А как это починить и где?
Ну я бы переопределил в своих стилях эти классы. В очень крайнем случае можно использовать !important
Через _preprocess & _theme , мало, делай fork