Повторяющиеся события (до v7.1)
Эта статья описыва ет устаревший формат повторяющихся событий в DHTMLX Scheduler. Для информации о текущей версии в DHTMLX Scheduler v7.1+ смотрите здесь.
По умолчанию Scheduler не поддерживает повторяющиеся события. Чтобы добавить эту функциональность, необходимо включить специальное расширение recurring_legacy на вашей странице.
scheduler.plugins({
recurring_legacy: true
});
После включения поддержки повторяющихся событий в лайтбоксе появится дополнительный раздел, как показано ниже:

Опции конфигурации
Библиотека предоставляет несколько опций для настройки повторяющихся событий:
- repeat_date - управляет форматом даты для поля 'End by' в тултипе 'recurring' лайтбокса
- include_end_by - задаёт, включается ли дата в поле 'End by'
- recurring_overflow_instances - управляет обработкой повторов, выходящих за пределы месяца
- repeat_precise - предотвращает включение прошедших дат для событий с недельной периодичностью
- occurrence_timestamp_in_utc - позволяет работать с повторяющимися событиями вне завис имости от часового пояса
scheduler.config.repeat_date = "%m/%d/%Y";
scheduler.config.include_end_by = true;
...
scheduler.init('scheduler_here', new Date(2019, 7, 5), "month");
Лайтбокс 'Recurring'
После включения расширения для повторяющихся событий в лайтбоксе появляется дополнительный раздел с названием "Repeat event". По умолчанию конфигурация лайтбокса для повторяющихся событий выглядит так:
[
{name:"description", height:130, map_to:"text", type:"textarea" , focus:true},
{name:"recurring", height:115, type:"recurring", map_to:"rec_type",
button:"recurring"},
{name:"time", height:72, type:"time", map_to:"auto"}
];
Вы можете добавить дополнительные секции, если это необходимо, но секции "recurring" и "time" должны присутствовать обязательно. Кроме того, секция "time" всегда должна идти после секции "recurring".
Интеграция на сервере
Повторяющееся событие хранится в базе данных как одна запись, которая содержит все стандартные поля события плюс три дополнительных:
- rec_type - (varchar) определяет шаблон повторения; это поле заполняется автоматически
- event_length - (long int) длительность события в секундах
- event_pid - (int) идентификатор родительского события для серии
Типичный запрос к коннектору может выглядеть так:
$scheduler->render_table("events_rec","event_id",
"start_date,end_date,text,rec_type,event_pid,event_length");
Помимо этих обязательных полей, вы можете получать любые другие данные из вашей базы.
Обратите внимание, что значения start_date и end_date имеют здесь немного иное значение:
- start_date - дата и время начала первого события в серии, в формате 'yyyy-mm-dd hh:mm:ss' (см. Спецификация формата даты).
- end_date - дата окончания последнего события в серии, в формате 'yyyy-mm-dd 00:00:00' (см. Спецификация формата даты).
Например, повторяющееся событие, начинающееся 3 января 2019 года в 10:00, повторяющееся ежедневно и заканчивающееся 13 января 2019 года в 12:00, будет храниться так:
id:1,
start_date:"2019-01-03 10:00:00",
end_date:"2019-01-13 00:00:00",
text:"some_text",
details:"",
rec_type:"day_1___",
event_length:"7200",
event_pid:"0" // 0 для родительских событий или ID родителя для под-событий
На клиентской стороне поле rec_type содержит строку в формате:
[type]_[count]_[day]_[count2]_[days]#[extra]
где:
- type - тип повторения: 'day','week','month','year'.
- count - интервал между событиями в указанных единицах.
- day и count2 - определяют конкретный день месяца (например, первый понедельник, третья пятница).
- days - список затронутых дней недели через запятую.
- extra - дополнительная информация, которая может влиять на отображение повторяющихся деталей.
Примеры значений rec_type:
- "day_3___" - каждые три дня
- "month_2___" - каждые два месяца
- "month_1_1_2_" - второй понедельник каждого месяца
- "week_2___1,5" - понедельник и пятница каждую вторую неделю
Примечание: двойное или тройное подчёркивание означает, что параметры пропущены.
Парсинг серий на сервере
Повторяющиеся события хранятся в базе как отдельные записи, которые Scheduler может разбивать на клиенте. Если вам нужно получить отдельные даты повторов на сервере, доступны вспомогательные библиотеки для разбора повторяющихся событий для ASP.NET/ASP.NET Core и PHP.
Эти библиотеки доступны на GitHub:
Редактирование/удаление отдельного повтора в серии
Можно редактировать или удалять отдельные повторы внутри серии повторяющихся событий.