Создание и управление календарями

:bookmark: Это руководство объясняет, как создавать и управлять календарями в Discourse с помощью плагина Calendar (и Event).

:person_raising_hand: Требуемый уровень пользователя: Все пользователи

Календари — это мощная функция в Discourse, позволяющая организовывать и отображать события внутри вашего сообщества. Это руководство проведет вас через процесс создания календарей, добавления событий и их эффективного управления.

Краткое содержание

  • Включение плагина Calendar
  • Создание календаря в теме или категории
  • Добавление событий в календарь
  • Управление опциями и настройками календаря
  • Использование функции праздничного календаря

Включение плагина Calendar

Прежде чем создавать календари, убедитесь, что плагин «Calendar (and Event)» включен в вашем экземпляре Discourse. Для получения дополнительных сведений о включении плагина и связанных с ним настройках обратитесь к документации по плагину Discourse Calendar and Event.

Создание календаря

Календарь темы

Чтобы встроить календарь в тему:

  1. Создайте новую тему или отредактируйте первый пост существующей темы.

  2. Добавьте следующий код на отдельных строках:

    [calendar]
    [/calendar]
    
  3. Опубликуйте или обновите пост.


:information_source: Первый день недели по умолчанию — понедельник, но его можно настроить с помощью настройки сайта «calendar first day of week» (варианты: суббота, воскресенье или понедельник).

Календарь категории

Чтобы создать календарь для всей категории:

  1. Перейдите в /admin/site_settings/category/discourse_calendar?filter=plugin=discourse-calendar.

  2. В настройке «calendar categories» добавьте запись в следующем формате:

    categoryId=123;tzPicker;defaultView=month
    
    • Замените 123 на ID вашей категории (можно найти в URL при просмотре категории).
  3. Добавьте ID категории в настройку «events calendar categories».

  4. При желании установите «discourse post event allowed on groups», чтобы контролировать, какие группы могут добавлять события.

Добавление элементов в календарь

Календарь темы

Чтобы добавить событие в календарь темы:

  1. Ответьте на тему, содержащую календарь.
  2. Откройте меню опций ⊕ на панели инструментов редактора и используйте функцию «Вставить дату / время», чтобы добавить дату или диапазон дат.
  3. Добавьте описание над датой.
  4. Отправьте ответ.

Событие появится в календаре после перезагрузки темы.

Календарь категории

Чтобы добавить событие в календарь категории:

  1. Создайте новую тему в категории.
  2. Откройте меню опций ⊕ на панели инструментов редактора и выберите «Создать событие».
  3. Заполните детали события и опубликуйте.

Событие появится в календаре категории.

Опции календаря

Вы можете настроить свой календарь, используя различные опции:

Опция Пример Описание
Скрыть выходные weekends="false" Скрывает субботу и воскресенье
Скрыть конкретные дни hiddenDays="1,2" Скрывает понедельник и вторник (используйте 0–6 для воскресенья–субботы)
Установить вид по умолчанию defaultView="month" Варианты: month, week, listNextYear
Игнорировать часовые пояса fullDay="true" Рассматривает все события как целодневные

Пример использования:

[calendar weekends="false" hiddenDays="1,2" defaultView="week" fullDay="true"]
[/calendar]

Удаление элементов календаря

Элементы календаря можно удалить следующими способами:

  • Истекшие элементы календаря могут быть автоматически удалены с помощью настройки «delete expired event posts after».
  • Используйте таймеры тем для автоматического удаления ответов.
  • Вручную удаляйте посты по мере необходимости.

Праздничный календарь

Праздничный календарь — это специальная функция для управления отпусками сотрудников сайта:

  1. Создайте тему с календарем в первом посте.
  2. Установите «holiday calendar topic id» равным ID этой темы.
  3. Ответы на эту тему будут считаться временем отпуска для пользователя, который их опубликовал.
  4. Каждый ответ должен содержать временную метку, добавленную через функцию «Вставить дату / время» в меню опций ⊕ редактора, чтобы она отобразилась в календаре.
  5. Записи об отпусках автоматически и случайно раскрашиваются.
  6. Рядом с именами пользователей, находящихся в отпуске, в карточках пользователей и при упоминаниях @ появляется эмодзи (по умолчанию: :date:).
  7. При желании включите «calendar automatic holidays enabled», чтобы добавить праздники, специфичные для локалей пользователей.

Часто задаваемые вопросы

В: Почему некоторые события, кажется, занимают несколько дней?
О: Календарь всегда работает по UTC. Используйте настройки «all day event start time» и «all day event end time», чтобы скорректировать разницу в часовых поясах.

В: Могу ли я контролировать цвета записей в календаре?
О: Для календарей категорий и предстоящих событий вы можете назначать цвета по тегам или категориям с помощью настройки сайта «map events to color». Записи праздничного календаря автоматически и случайно раскрашиваются и не могут быть настроены.

В: Как отобразить прошлые события в виде списка?
О: В настоящее время существует ошибка при использовании defaultView=listNextYear, из-за которой начальное представление оказывается пустым. В качестве обходного пути пользователям необходимо переключиться на месячный вид, вернуться на один месяц назад, а затем вернуться к списку, чтобы увидеть прошлые события.

Дополнительные ресурсы

11 лайков

Мне трудно понять, как создать календарь, чтобы он отображался в категории, и что нужно сделать, чтобы заполнить его после создания. Для тем это довольно просто, но случай с категориями более запутанный. Не мог бы кто-нибудь привести пример?

Создание календаря категорий

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

1. Включите плагин календаря

В /admin/site_settings/category/discourse-calendar?filter=plugin%3Adiscourse-calendarкалендарные категории:

Вам понадобится что-то вроде: categoryId=123;postId=4949;tzPicker;defaultView=month

  • categoryId найти несложно: это число в URL при переходе по ссылке #category.

  • postId можно найти так: перейдите к описанию категории (закреплённая тема «О категории») и добавьте .json к URL: postId находится в начале JSON-файла.

  • Ознакомьтесь с документацией discourse-calendar по доступным опциям.

  • Добавьте категорию (в нашем примере она имеет номер 123) в категории календаря событий.

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

2. Создание события

Вы можете создать новую тему в категории 123 и нажать создать событие (через кнопку с шестерёнкой).

Событие затем появится в календаре категории.

:tada:

2 лайка

Есть ли способ отображать не предстоящие события, а события за прошедший год? Мы хотели бы использовать этот плагин для раздела журнала и перечислить все прошлые записи в первом сообщении.

При использовании следующего фрагмента список событий изначально пуст. Он появляется только после перехода к месячному виду, отката на один месяц назад и возвращения к списочному виду.

[calendar defaultView=listNextYear fullDay=true]
[/calendar]

Пример ошибки в действии:
CleanShot 2024-05-07 at 14.08.49 2

6 лайков

Меня тоже интересует эта функция.

Интересно, есть ли какие-нибудь скрипты для исследователя данных, которые могли бы дополнить поиск по календарю?

3 лайка

Когда кто-то из моего сообщества создает событие в календаре, а затем администратор редактирует это событие, почему тогда автор оригинального поста больше не может его редактировать?

Это огромная проблема, затрагивающая сотни людей.

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

Хотелось бы, чтобы это можно было настроить в админ-панели, так как сейчас каждый из них отображает календарь по-разному…

3 лайка

Ага. Это имеет смысл, потому что я не осознавал —

Чтобы праздники отображались в календаре праздников, стоит упомянуть, что ответ должен содержать временную метку, которую вы добавляете через меню редактора.
Также, как уже указывалось ранее, ID поста находится путём добавления .json к URL поста. Думаю, это стоит добавить в документацию здесь, так как, если категории имеют свой ID в URL, ID темы в URL может запутать пользователей, поскольку его число может быть близким, но не совпадать с реальным ID темы.

В любом случае спасибо за это руководство — здесь много чего нужно охватить, ведь функций очень много, и все они крутые. Отличная работа, разработчики!

Ах, переписывание с помощью ИИ добавило некоторую терминологию «событие». В идеале этот термин следует избегать в разделе «Календарь» документации, чтобы не создавать двусмысленности с дополнительной функцией «Событие» плагина.

1 лайк

Хочу спросить: у меня в Discourse нет кнопки календаря и шестерёнки после включения плагина. Что-то не так?

1 лайк

Значок шестеренки был заменен на некоторое время назад. Я думаю, что функция «Вставить дату» была перемещена в это дополнительное меню (по-моему, теперь она тоже использует значок ).

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

1 лайк

Спасибо за ответ, и тут я заметил ещё одну ошибку, связанную с этим. У меня есть эта иконка, но она слишком большая и находится не на своём месте, перекрывая всё, как вы видите. На телефоне всё нормально, а вот на рабочем столе — нет. Кстати, календаря нет, но в списке есть события. Что мне делать? :pleading_face:

Исправляет ли безопасный режим положение значка плюса?

Какую кнопку календаря вы ожидаете?

Эта кнопка теперь

У меня есть кнопка «Вставить», а как добавить календарь? Я пробовал код [calendar], он работает, но включает ли он дату/время в календарь?

Для большой кнопки я пробовал безопасный режим, но ничего не изменилось. Пересборка приложения не помогает. Можно ли надеяться, что следующее обновление исправит это?:relieved_face: Или есть что-то, что я могу сделать, кроме того чтобы начинать всё с самого начала :rofl:

:man_zombie:

Этот параметр, по-видимому, является вероятной причиной:

image