Перейти к основному содержимому

Загрузка данных

dhtmlxScheduler может загружать данные в нескольких форматах. Большинство приложений используют JSON. iCalendar (.ics) и XML также поддерживаются для совместимости или сценариев импорта.

Связанные руководства​

Загрузка данных из встроенного набора данных​

Чтобы загрузить данные из встроенного набора данных, используйте метод parse():

scheduler.init("scheduler_here", new Date(2027, 4, 1), "month");
...
scheduler.parse([
{ id: "1", text: "Meeting", start_date: "2027-05-11 14:00", end_date: "2027-05-11 17:00" },
{ id: "2", text: "Conference", start_date: "2027-05-15 12:00", end_date: "2027-05-18 19:00" },
{ id: "3", text: "Interview", start_date: "2027-05-24 09:00", end_date: "2027-05-24 10:00" }
]);

Связанные примеры​

Связанный API​

Связанные руководства​

Загрузка данных из файла​

Чтобы загрузить данные из файла, используйте метод load():

scheduler.init("scheduler_here", new Date(2027, 4, 1), "month");
...
scheduler.load("data.json"); // loading data from a file

Связанные примеры​

Связанный API​

Связанные руководства​

Загрузка данных с бэкенда​

Загружайте данные с вашего бэкенда, expose REST‑конечную точку, возвращающую события Scheduler в формате JSON.

  • Реализация на стороне сервера зависит от вашего стека технологий. Например, в Node.js можно добавить маршрут, который возвращает данные о событиях:
app.get("/data", async (request, response) => {
const events = await db.event.find().toArray();
response.json(events);
});
  • Со стороны клиента вызовите load() по URL данных:
scheduler.init("scheduler_here", new Date(2027, 4, 1), "month");
scheduler.load("/data");
примечание

Для сохранения изменений обратно на сервер используйте createDataProcessor(). См. Серверная интеграция.

Связанный API​

Связанные руководства​

Загрузка данных из нескольких источников​

Чтобы загрузить данные из нескольких источников, запросите необходимые конечные точки и объедините результаты перед вызовом parse():

Promise.all([
fetch("/api/events").then((response) => response.json()),
fetch("/api/holidays").then((response) => response.json())
]).then(([events, holidays]) => {
scheduler.parse([...events, ...holidays]);
});

Связанный API​

Связанные руководства​

Свойства данных​

Обязательные свойства​

Чтобы каждое событие можно было корректно разобрать, оно должно содержать следующие свойства:

  • id - (string|number) уникальный идентификатор события
  • start_date - (date|string) начальная дата события
  • end_date - (date|string) конечная дата события
  • text - (string) заголовок/описание события

Формат даты по умолчанию для данных в формате JSON и XML — '%Y-%m-%d %H:%i' (см. спецификацию формата даты)

Чтобы изменить его, используйте конфигурационный параметр date_format.

scheduler.config.date_format = "%Y-%m-%d %H:%i";
...
scheduler.init("scheduler_here", new Date(2027, 4, 18), "week");

Пользовательские свойства​

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

См. примеры данных с пользовательскими свойствами здесь

Связанный API​

Связанные руководства​

Структура базы данных​

При настройке базы данных ожидаемая структура таблиц для событий Scheduler следующая:

  • таблица events — хранит события Scheduler
  • id - (string/int/guid) уникальный идентификатор события. Первичный ключ, автоинкремент.
  • start_date - (DateTime) начальная дата события, не может быть NULL.
  • end_date - (DateTime) конечная дата события, не может быть NULL.
  • text - (string) заголовок/описание события.

Если у вас есть повторяющиеся события, добавьте следующие поля:

  • rrule - (string) правило повторения в формате RFC-5545
  • duration - (number) продолжительность каждого появления в секундах
  • recurring_event_id - (string/int/guid) идентификатор родительской серии для изменённых/удалённых повторов
  • original_start - (DateTime) исходная дата начала редактируемого/удалённого случая
  • deleted - (boolean) помечает удалённые случаи

Вы можете определить любые дополнительные столбцы, они могут быть загружены на клиент и доступны для клиентского API.

Связанные руководства​

Динамическая загрузка​

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

Техника​

Чтобы включить динамическую загрузку, вызовите метод setLoadMode():

scheduler.setLoadMode("month");
scheduler.load("/api/events");

В качестве параметра метод принимает режим загрузки, который определяет размер загружаемых данных: day, week, month или year.

Например, если задать режим 'week', планировщик будет запрашивать данные только за текущую неделю и подгружать оставшиеся по требованию.

Как работают режимы загрузки​

Предопределённые режимы загрузки задают интервал загрузки данных в пределах установленного периода. Например, вы открываете Week View в scheduler для следующих дат: с 2027-02-02 по 2027-02-09. В зависимости от выбранного режима динамическая загрузка будет происходить следующим образом:

  • для режима "day"
scheduler.setLoadMode("day");

Планировщик будет запрашивать данные по дням, например: с 2027-02-02 по 2027-02-09.

  • для режима "month"
scheduler.setLoadMode("month");

Планировщик будет запрашивать данные по целым месяцам, например: с 2027-02-01 по 2027-03-01.

  • для режима "year"
scheduler.setLoadMode("year");

Планировщик будет запрашивать данные по целым годам, например: с 2027-01-01 по 2028-01-01.

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

Интервал загрузки определяет:

  • частоту вызовов динамической загрузки

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

  • длительность обработки отдельного запроса

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

Запрос​

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

/api/events?from=DATEHERE&to=DATEHERE

где DATEHERE — корректное значение даты в формате, определённом опцией load_date

Связанный API​

Индикация загрузки​

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

Чтобы включить индикатор загрузки для scheduler, установите свойство show_loading в true.

scheduler.config.show_loading = true;
...
scheduler.init("scheduler_here", new Date(2027, 4, 10), "month");
примечание

Чтобы изменить изображение спиннера загрузки, замените 'imgs/loading.gif' на ваше собственное изображение.

Загрузка данных с Timeline и Units секций с сервера​

При загрузке данных в Timeline и Units виды вам нужно задать массив секций, которые будут загружаться в представления.

Чтобы загрузить данные, содержащие секции Timeline и Units, из бэкенда, нужно реализовать более расширенную конфигурацию:

  • во время инициализации вида Timeline вместо массива sections используйте метод serverList() и передайте имя коллекции в качестве аргумента:
scheduler.createTimelineView({
....
y_unit: scheduler.serverList("sections"),
...
});
  • чтобы загрузить данные в scheduler, используйте метод load():
scheduler.load("data.json");

Если вы получаете данные вручную (например, чтобы добавить заголовки), вы можете передать тот же payload в parse():

fetch("/api/timeline")
.then((response) => response.json())
.then((payload) => scheduler.parse(payload, "json"));
  • во время реализации ответа данных scheduler на бэкенде используйте следующий формат:
data.json
{
"data":[
{
"id":"1",
"start_date":"2027-03-02 00:00:00",
"end_date":"2027-03-04 00:00:00",
"text":"dblclick me!",
"type":"1"
},
{
"id":"2",
"start_date":"2027-03-09 00:00:00",
"end_date":"2027-03-11 00:00:00",
"text":"and me!",
"type":"2"
},
{
"id":"3",
"start_date":"2027-03-16 00:00:00",
"end_date":"2027-03-18 00:00:00",
"text":"and me too!",
"type":"3"
},
{
"id":"4",
"start_date":"2027-03-02 08:00:00",
"end_date":"2027-03-02 14:10:00",
"text":"Type 2 event",
"type":"2"
}
],
"collections": {
"sections":[
{"value":"1","label":"Simple"},
{"value":"2","label":"Complex"},
{"value":"3","label":"Unknown"}
]
}
}

В приведённом выше примере массив "data" содержит календарные события, а хэш "collections" содержит коллекции, на которые можно ссылаться через метод serverList().

Связанный API​

Связанные руководства​

Need help?
Got a question about the documentation? Reach out to our technical support team for help and guidance. For custom component solutions, visit the Services page.