[myCalendar] Календарь для MODX
Есть прикольный календарик на javascript — fullCalendar. Много настроек, красивый вид, поддерживается разработчиками. Но он расчитан только на рендеринг событий. Лично мне он понравился и поэтому я решил познакомить его с MODX Revolution.

Вызывается так
Добавлять события можно либо просто кликом на нужное время, либо выделением диапазона. В первом случае конечное время события определяется согласно параметру defaultDuration. А во втором случае, начальное и конечное время определяются по границам выделения.
События можно перемещать, ресайзить, удалять.

Календарь может работать с Google Calendar. Для этого нужно в системных настройках указать Google Calendar API Key, а в сниппете через запятую указать google календари
С событиями Google календаря манипуляции ограничены. Их можно только редактировать, да и то только в собственном Google интерфейсе.
Собственно это все.
Проект на Github
В главном магазине MODX страны.
Update. В новой версии можно вызывать несколько календарей одновременно.

Вызывается так
[[!myCalendar?]]У сниппета есть несколько параметров из настроек fullCalendar, которых вполне достаточно для работы. Если нужны дополнительные настройки, то их можно добавить в скрипт самостоятельно. Добавлять события можно либо просто кликом на нужное время, либо выделением диапазона. В первом случае конечное время события определяется согласно параметру defaultDuration. А во втором случае, начальное и конечное время определяются по границам выделения.
События можно перемещать, ресайзить, удалять.

Календарь может работать с Google Calendar. Для этого нужно в системных настройках указать Google Calendar API Key, а в сниппете через запятую указать google календари
[[!myCalendar? &googleCalendars=`ru.russian#holiday@group.v.calendar.google.com`]]Как настроить можно прочитать тут.С событиями Google календаря манипуляции ограничены. Их можно только редактировать, да и то только в собственном Google интерфейсе.
Собственно это все.
Проект на Github
В главном магазине MODX страны.
Update. В новой версии можно вызывать несколько календарей одновременно.
Комментарии: 96
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Я тоже делал что-то подобное давно, но потом забросил.
Если нужно разрешить редактировать только авторизованным, то в сниппет перед перед сохранением параметров в сессию можно дописать условие
Тогда неавторизованный пользователь может только любоваться. :)
А вообще это решение — вырезка из дополнения, которое я щас заканчиваю по заказу знакомого — с авторизацией, неограниченным количеством календарей с интерфейсом в админке, уведомлением пользователя на сайте и по почте, повторением событий. В дальнейшем хочет назначать задачи пользователям и следить за исполнением.
Любой мог добавить, но удалить \ изменить время мог только админ
Возможность менять период времени записи. тут 20 мин например, а сказали могут 10. + день как видите размет на 4 кабинки. это все надо было учесть. и самый оптимальный вариант на тот момент оказался этот
Может у этого есть, конечно, какой-то смысл?
В системных настройках нужно указать свой путь в параметре mycalendar.assets_url и, соответственно, css и js файлы будут доступны по новому пути — «новое значение/css/» и «новое значение/js/». И пожалуйста, подключай свои файлы.
Это к разговору о разработчиках. Для простого админа это не очень прозрачно.
UPD. Василий меня опередил))
Разработчикам на PhpStorm будет полезно узнать про плагин File Watchers, который автоматически сжимает css и js файлы. Работаешь в нормальной версии, а рядом появляется сжатый вариант. После каждого редактирования обычного файла сжатый файл автоматом обновляется. Я себе настроил этот плагин. Очень удобно.
на оном ресурсе без ошибки, на другом с это ошибкой — оба сайта идентичны, разница только в домене.
2. И при изменении настройки разрешить редактировать только авторизованным доступ к изменениям становится недоступен всем пользователям, авторизованным и нет.
Подскажите куда копать?
Сниппет нужно вызывать не кэшированным, как в описании.
2. Так и делал.
2. Ты вызываешь сниппет кэшированным
Чтобы вызвать его некэшированным нужно указывать восклицательный знак перед именем сниппета.
Кроме того, в параметре defaultColor нужно указывать значение цвета в css формате. Если нужен черный цвет, то так
2. Спасибо, исправил, но все равно тоже самое (проверяю на другом сайте, не где ошибку выдает) при вызове [[!myCalendar? &allowGuestEdit=`0`]] авторизованному пользователю не дает возможность редактировать, но выводит календарь на странице. при вызове [[!myCalendar? &allowGuestEdit=`1`]] выводит календарь всем, авторизованным и нет, и дает возможность редактировать
А хостинг один и тот же?
1. Попробую еще тогда погуглить, спасибо за направление куда копать.
видел вот такое решение с async:false вот только где прописывать это не понял.
2. А по этому что скажешь? я уже и кеша чистил, и права перегружал и папку кеш сносил, ничего не помогает. может какие настройки с самим modx? я уже и не знаю куда копать (((
пробовал по этим вопросам тестировать на двух разных хостингах и на локальном опенсервер все одинаково.
Параметр allowGuestEdit работает как положено. Где проверить эту ошибку?
С аяксом обязательно буду разбираться, может что-то старшие товарищи подскажут.
2. только что гонял туда — сюда этот параметр на алифе, все так-же. Думал кеша браузера, попробовал в двух разных и из под разных учеток.
Только что погонял с авторизацией и без несколько раз. Ставлю allowGuestEdit =`1` -> F5. Ставлю allowGuestEdit =`0` -> F5. И так несколько раз. Все работает. Что-то видимо у тебя криво стоит. Или мы друг друга не понимаем.
Скорее всего криво или с хостингом что-то, во общем буду искать. Сейчас сайт живет какой-то своей жизнью, BannerY вообще отвалились (в админке не отображаются). Хотя на другом сайте, все гуд.
Проверю, отпишусь.
Ставлю allowGuestEdit =`1` -> F5, доступ к редактированию есть у всех. У тех кто авторизован и нет.
Ставлю allowGuestEdit =`0` -> F5, доступа к редактированию нет ни у кого.
С авторизованным проверять не стал. Ибо итак работает.
Хотя выше описана тобой-же верная логика.
Еще раз повторюсь.
Ставлю [[!myCalendar? &allowGuestEdit=`1`]]
Доступ к редактированию есть у всех.
Ставлю [[!myCalendar? &allowGuestEdit=`0`]]
Редактировать ни кто не может, авторизованный и не авторизованный пользователь.
Как я понял при &allowGuestEdit=`0` доступ к редактированию должен пропасть только у не авторизованных пользователей. исходя из твоего коммента
Для неавторизованного пользователя
Для авторизованного пользователя
Как видишь, редактирование возможно.
Дружище, я больше не знаю чем тебе помочь. Все работает как я и писал выше. Только теперь с подтверждением.
Если ты хочешь, чтоб параметр allowGuestEdit работал и для авторизованных в админке, то нужно в условии указать контекст mgr, а не текущий
Вообще, настроек огромадное количество. Они все описаны на сайте fullCalendar.
В следующей версии добавлю возможность подключать свои js и css файлы, чтоб не затирались изменения в настройках при обновлении.
П.С. Пробел в теге br нужно убрать.
Ну уж такие простые вещи можно и самому попробовать сделать.
Ещё такой вопрос, у меня на одной странице 2 календаря, eventCalendar2 и myCalendar при попытки добавить запись
Создал пустой файл с эти именем
П.С. Теперь знаю чем заняться вечерком.
eventCalendar просто выводит события. Он не может их сохранять. Поэтому там все проще.
Выход только один — переписывать все с нуля.
1. При установке опции &allowGuestEdit=`0` вроде все гуд — гости смотрят, админы редактируют и добавляют. Но только админ не может удалить событие. Всплывает окно с предупреждением, а далее сообщение, что редактирование запрещено.
2. Помогите подружить его с гугл-календарем! Вроде и api сделал, и id гугловского календаря прописал… но что-то где-то не так. Кстати, у меня id в виде e-mail, а здесь в примере вот так: &googleCalendars=`ru.russian#holiday@group.v.calendar.google.com`. Это как понимать?
if (!$this->config['allowGuestEdit'] && !$this->modx->user->isAuthenticated('mgr')) (406 строка).
И всё заработало.
Вообще, думаю, там следует учинять ровно такую же проверку, как и в коде сниппета. У меня, в частности, требуется, чтобы только залогиненный в админку пользователь мог редактировать календарь, поэтому и проверяю isAuthenticated('mgr').
Конечно, дублировать код не надо.
Благодарю за вашу работу.
По инструкции должно быть 3 шага:
1. Получить API Google календаря.
2. Создать доступный всем (public) google календарь.
3. Получить его ID. Он должен выглядеть как-то так abcd1234@group.calendar.google.com.
API Google календаря прописать в системных настройках, а ID календаря в параметре &googleCalendars сниппета. Если все сделано правильно, то должно работать.
Календарь ru.russian#holiday@group.v.calendar.google.com является общим календарем с праздниками, у Вас он тоже должен работать.
(ERROR @ /assets/components/mycalendar/action.php) No class specified for loadClass
Появилась после обновления движка и компонента
Ещё присутствуют такие ошибки
(ERROR @ /assets/components/mycalendar/action.php) Could not load class: myCalendarEvents from mysql.mycalendarevents.
(ERROR @ /assets/components/mycalendar/action.php) myCalendarEvents::getSelectColumns() is not a valid static method.
Если еще поделитесь фрагментом кода который добавляет в «eventform» возможность создавать периодические события, буду крайне Вам признателен!
Установил сниппет. Вызываю так:
При этом всё равно, если пользователь не авторизован в админке — он может править события. Подскажите, что можно сделать и куда копать?
Спасибо!
У меня чисто информационный сайт. И при просмотре календаря я захожу из другого браузера.
Когда я сделал сниппет на основе вот этого кода из вашей доки:
Допустим с названием и выводом [[!calendarPermission?]] сайт выпадает с ошибкой 500. Или же это опять же связано с авторизацией во фронтенде?
П.С. У меня на сайте почему-то всё работает как положено.
[[!myCalendar? &googleCalendars=`ru.russian#holiday@group.v.calendar.google.com`]]
ни к чему не приводит — календарь на фронт-энде пустой, хотя выше указан именно этот календарь для примера. Другие календари тоже не подключались. В консоли выводится ошибка
«Specify a googleCalendarApiKey. See fullcalendar.io/docs/google_calendar/»
В гугле опять что-то наменяли, что перестало работать? С этими «обновлениями с последствиями» на других языках уже сталкивался.
Подскажите как на бэкенде возможно обработать добавление события?
Такой вызов выводит простой список без рендера календаря из таблицы mycalendar… Каким образом можно приджойнить товары минишопа и возможно ли это??