Сериализация данных в XML, JSON, iCal

Подготовка

Чтобы включить эту функциональность, просто активируйте расширение serialize.

scheduler.plugins({
    serialize: true
});

Экспорт в XML

Чтобы преобразовать данные планировщика в XML-строку, используйте метод toXML:

var xml = scheduler.toXML(); //xml string

Related sample:  Serialize scheduler events

Экспорт в JSON

Чтобы преобразовать данные планировщика в JSON-строку, используйте метод toJSON:

var json_string = scheduler.toJSON(); //json string

Имейте в виду, что этот метод возвращает JSON-строку, а не JavaScript-объект. Если вам нужен JSON-объект, используйте метод getEvents.

Related sample:  Serialize scheduler events

Экспорт в iCal

Чтобы преобразовать данные планировщика в iCal-строку, используйте метод toICal:

var ical_string = scheduler.toICal(); //ical string

Также существует внешний скрипт для операций импорта-экспорта iCal

Related sample:  Serialize scheduler events

Атрибуты при сериализации

Этот подход не применяется к формату iCal.

По умолчанию в экспорт включаются только стандартные атрибуты (свойства):

  1. id
  2. text
  3. start_date (формат сериализации контролируется свойством date_format)
  4. end_date

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

scheduler.data_attributes = function(){
    return [
        ["id"],["text"],["date_start"],["date_end"],
        ["custom_attribute"]
    ];
};

По сути, этот метод возвращает список имён атрибутов.

Также можно указать функцию форматирования для обработки данных атрибута перед сериализацией.

Это удобно для обработки дат, которые требуют форматирования перед добавлением в XML.

scheduler.data_attributes = function(){
    return [
        ["id"],
        ["text"],
        ["start_date",scheduler.templates.format_date],
        ["end_date",scheduler.templates.format_date]];
}

Сериализация повторяющихся событий

Этот способ не применим для формата iCal.

Если используется расширение "recurring", необходимо определить дополнительные атрибуты, связанные с повторяющимися событиями:

scheduler.data_attributes = function(){
    var empty = function(a){ return a||""; }
    return [["id"],
        ["text"],
        ["start_date",scheduler.templates.xml_format],
        ["end_date",scheduler.templates.xml_format],
        ["rec_type",empty],
        ["event_length",empty],
        ["event_pid",empty]];
}

Сохранение данных в XML-файл

Сериализация позволяет сохранять данные, просто помещая их в XML-файл, без необходимости использования базы данных.

  • Сначала включите расширение serialize:
scheduler.plugins({
    serialize: true
});
  • Далее добавьте на страницу скрытую форму для сохранения данных:
<form id="xml_form" action="xml_writer.php" method="post" target="hidden_frame" >
    <input type="hidden" name="data" value="" id="data">
</form>
  • Разместите на странице кнопку "Сохранить":
<input type="button" name="save" value="save" onclick="save()" >
function save(){
    var form = document.getElementById("xml_form");
    form.elements.data.value = scheduler.toXML();
    form.submit();
}
  • На сервере запишите данные в существующий файл. Пример xml_writer.php:
<?php
    file_put_contents("./data.xml",$_POST["data"]);
?>

Пустой файл data.xml выглядит так:

<data></data>

С такой настройкой планировщик сможет загружать события из data.xml, а при нажатии кнопки "save" будет сериализовать текущее состояние планировщика в XML и сохранять его обратно в файл.

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

Решение проблем

Если вы замечаете нежелательное экранирование данных при сохранении, убедитесь, что в вашей конфигурации PHP отключена опция "magic_quotes".

Наверх