Эта долгожданная функция позволяет указать, когда должна прекратиться серия повторяющихся событий, давая вам больше контроля над планированием мероприятий.
Создавайте события, повторяющиеся ежедневно, еженедельно или ежемесячно, и теперь точно определяйте, когда они должны завершиться.
Сложность со словом «Until» заключается в том, что не совсем очевидно, включается ли оно или исключается. Можно ли что-то сделать здесь, чтобы прояснить ситуацию?
Возможно, вам стоит позаимствовать некоторые идеи из моей реализации дат начала/окончания действия ваучера в диалоговом окне «Новый ваучер» в системе электронной коммерции, над которой я работаю:
Технические детали: В нашем приложении мы всегда сохраняем даты как «timestamp with timezone» (в PostgreSQL), поэтому ни настройки базы данных, ни настройки подключения не могут повлиять на фактически сохранённый временной штамп. Хотя PostgreSQL не рекомендует этого делать, мы так поступаем, потому что это даёт 100% гарантию корректности даты в любой ситуации и в любом SQL-запросе. Вы можете работать с часовыми поясами дат прямо в PostgreSQL, используя их функции для работы с датой/временем/часовым поясом, и быть уверенными, что это будет работать абсолютно корректно всегда. Мы полагаемся на это.
Кроме того, у нас есть настройка часового пояса для всех типов сущностей, где это необходимо: профили пользователей, рынки, ваучеры, отчётность для бухгалтеров и так далее — это позволяет нам при необходимости переводить любые даты в любой часовой пояс без колебаний.
Основные выводы здесь следующие:
Всегда храните дату и время вместе с часовым поясом.
Всегда храните предпочтительный часовой пояс.
Будьте очень явны в отображении дат в интерфейсе, не применяйте никаких «магических» преобразований.
Позвольте пользователю увидеть фактические даты в выбранном часовом поясе перед нажатием кнопки «Сохранить».
По-моему, на скриншоте показано диалоговое окно Вставить дату/время, а не Создать событие.
В календаре Discourse это два разных сценария работы:
Вставить дату/время используется для ответов в теме, в первом сообщении которой есть блок [calendar].
Создать событие создаёт фактическое событие ([event ...][/event]), именно здесь доступны настройки повторяющихся событий, включая дату окончания повторения.
Поэтому, чтобы воспользоваться функцией, о которой сообщается в этой теме, откройте меню + в редакторе и выберите Создать событие, а не Вставить дату/время.
Недавно я тестировал этот сценарий с повторяющимися событиями и также обнаружил крайний случай, возникающий после полного истечения ограниченного по времени повторения, для которого я открыл исправление здесь:
Просто для уточнения: я не думаю, что здесь действительно речь о том, что функция не работает для Вставить дату / время — это другой рабочий процесс.
Вставить дату / время используется, когда в первом сообщении темы есть блок [calendar], и вы хотите, чтобы ответы с датой отображались именно в календаре этой конкретной темы.
Создать событие, с другой стороны, создаёт реальное событие Discourse ([event ...][/event]). Дата окончания повторяющегося события, о которой шла речь в этой теме, относится к системе повторения событий.
Так что, если ваша цель — поддерживать календарь, привязанный к одной теме, то рабочий процесс, показанный на вашем исходном скриншоте, является подходящим; просто он не использует ту же функцию ограниченного повторения, что и события.
Задача состоит в том, чтобы вести календарь для моей школы. Всегда есть события, которые нужно вносить, и любой родитель может ответить на тему, чтобы добавить новое событие.
Но всего вчера мне нужно было добавить повторяющееся событие, и, к сожалению, в этом рабочем процессе у нас нет такой возможности. Поэтому мне приходится делать это вручную, отвечая на тему много раз с новой датой (не знаю, есть ли какой-нибудь более умный способ…).
Существует возможность автоматизировать ручные ответы, сохранив при этом существующую локальную для темы [calendar] рабочую схему.
Один из вариантов — использовать отдельного пользователя Discourse с включённой функцией «ответ по электронной почте», а затем с помощью Power Automate или Azure Logic App генерировать индивидуальные ответы с указанием даты и отправлять их в тему календаря по электронной почте.
Например, еженедельное событие с датой окончания может быть автоматически разбито на необходимые отдельные ответы, чтобы родители продолжали видеть один обычный календарь в теме, а не отдельные темы для событий.
Есть несколько нюансов, связанных с индивидуальными ключами «ответ по электронной почте» в Discourse, которые потребуют тщательной настройки, поэтому, вероятно, в этой теме не стоит подробно разбирать конфигурацию.
Если такой подход вам подходит, я с удовольствием помогу разобраться с ним в отдельной теме раздела Meta.
Пока это случилось только один раз, поэтому я подожду до следующего раза (и надеюсь, что это больше не повторится).
Я сохраню трюк с ответом по электронной почте, спасибо. Но это означает, что для события, которое проходит каждую неделю в течение целого года, нам придётся генерировать 52 ответа? Из-за этого тема станет трудной для чтения…
В противном случае, учитывая, что у меня есть права администратора, я могу использовать API, чтобы вручную добавлять записи о встречах.
Да, к сожалению, API автоматизировало бы создание ответов, но не решило бы по-настоящему проблему загромождения: для календаря темы отдельные записи по-прежнему будут представлены отдельными ответами.
Я только что нашёл существующее предложение по улучшению, которое почти точно соответствует вашему сценарию использования:
В их примере курс проходит в течение двенадцати последовательных сред, и они делают тот же вывод: создание каждого вхождения по отдельности — это утомительно и загромождает тему.
Они предлагают разрешить указание периодичности в Вставить дату/время вместе с датой окончания для последнего вхождения, что звучит очень близко к тому, что вам нужно.
Так что, вместо того чтобы создавать обходное решение через API/Power Automate, которое сгенерирует 52 поста, лучше всего добавить ваш сценарий с календарём школы именно в это предложение по улучшению.
Если вас беспокоит загромождённость, я бы рекомендовал использовать настройку Events_calendar_categories, а не календарь для каждой темы, и родители смогут получить доступ к Discourse с помощью автоматизации, которая ведёт на