dhtmlxScheduler unterstützt das Laden von Daten in drei Formaten:
Um Daten direkt aus einem Inline-Datensatz zu laden, wird die Methode parse verwendet:
scheduler.init('scheduler_here',new Date(2009,10,1),"month");
...
scheduler.parse([
{text:"Meeting", start_date:"2019-04-11 14:00", end_date:"2019-04-11 17:00"},
{text:"Conference", start_date:"2019-04-15 12:00", end_date:"2019-04-18 19:00"},
{text:"Interview", start_date:"2019-04-24 09:00", end_date:"2019-04-24 10:00"}
],"json");
Related sample: Displaying events as a cascade
Um Daten aus einer externen Datei zu laden, wird die Methode load verwendet:
scheduler.init('scheduler_here',new Date(2018,10,1),"month");
...
scheduler.load("data.json"); //Laden von Daten aus einer Datei
Related sample: Basic initialization
Es gibt zwei Ansätze, um Daten aus einer Datenbank zu laden. Beide erfordern die Umsetzung auf Client- und Serverseite.
1) Der erste Ansatz nutzt eine REST-API zur Kommunikation mit dem Server.
Diese Route erzeugt eine JSON-Antwort.
app.get('/data', function(req, res){
db.event.find().toArray(function(err, data){
//set id property for all records
for (var i = 0; i < data.length; i++)
data[i].id = data[i]._id;
//output response
res.send(data);
});
});
Loading from a database. Client-side code
scheduler.init('scheduler_here', new Date(), "month");
scheduler.load("apiUrl");
Ausführlichere Informationen zur Server-Integration mit der REST-API finden Sie im Artikel Serverseitige Integration.
2) Der zweite Ansatz beinhaltet das Laden von Daten aus Datenbanktabellen mit dem PHP Connector.
Static loading from db. Server-side code
include ('dhtmlxConnector/codebase/scheduler_connector.php');
$res=mysql_connect("localhost","root","");
mysql_select_db("sampleDB");
$calendar = new SchedulerConnector($res);
$calendar->render_table("events","id","event_start,event_end,text","type");
Static loading from db. Client-side code
scheduler.init('scheduler_here', new Date(), "month");
scheduler.load("events.php");
Weitere Details finden Sie im dhtmlxScheduler mit dhtmlxConnector Leitfaden.
Um Daten aus mehreren Quellen zu laden, steht die multisource-Erweiterung zur Verfügung:
scheduler.plugins({
multisource: true
});
Mehrere Quellen können sowohl für statisches als auch für dynamisches Laden verwendet werden.
Nach Einbindung der entsprechenden Datei kann die Methode load ein Array von Quellen akzeptieren:
scheduler.load(["first/source/some","second/source/other"]);
Datenelemente benötigen mindestens diese drei Eigenschaften, um korrekt geparst zu werden:
Beim Laden aus einer Datenbank ist eine zusätzliche Pflichtangabe erforderlich:
Standardmäßig verwenden JSON- und XML-Daten das Datumsformat '%Y-%m-%d %H:%i' (siehe Spezifikation des Datumsformats).
Um es zu ändern, verwenden Sie die Option date_format.
scheduler.config.date_format="%Y-%m-%d %H:%i";
...
scheduler.init('scheduler_here', new Date(2019, 3, 18), "week");
Neben den erforderlichen Feldern können Datenelementen benutzerdefinierte Eigenschaften hinzugefügt werden. Diese zusätzlichen Eigenschaften werden als Strings geparst und können nach Bedarf auf der Client-Seite verwendet werden.
Beispiele für Daten mit benutzerdefinierten Eigenschaften finden Sie hier.
Bei der Einrichtung einer Datenbank für Scheduler-Ereignisse wird folgende Struktur erwartet:
Für wiederkehrende Ereignisse werden zusätzliche Spalten benötigt:
Weitere Spalten können nach Bedarf hinzugefügt werden; sie sind über die Client-API zugänglich.
Standardmäßig lädt dhtmlxScheduler alle Daten auf einmal, was bei großen Datenmengen ineffizient sein kann. Mit dynamischem Laden können Daten in Teilen geladen werden, die auf den aktuell sichtbaren Bereich beschränkt sind.
Aktivieren Sie das dynamische Laden durch Aufruf der Methode setLoadMode:
Enabling the dynamic loading
scheduler.setLoadMode("month");
scheduler.load("some.php");
Die Methode akzeptiert einen Lade-Modus, der die zu ladende Datenmenge festlegt: day, week, month oder year.
Beispielsweise lädt der Modus 'week' nur Daten für die aktuelle Woche und lädt bei Bedarf weitere Daten nach.
Lademodi bestimmen das Intervall der geladenen Daten für den ausgewählten Zeitraum. Zum Beispiel beim Öffnen der Wochenansicht für Daten vom 29.01.2018 bis 05.02.2018:
scheduler.setLoadMode("day");
Scheduler fordert Daten tageweise an, z.B. vom 29.01.2018 bis 05.02.2018.
scheduler.setLoadMode("month");
Scheduler fordert Daten für volle Monate an, z.B. vom 01.01.2018 bis 01.03.2018.
scheduler.setLoadMode("year");
Scheduler fordert Daten für volle Jahre an, z.B. vom 01.01.2018 bis 01.01.2019.
Das angeforderte Intervall ist immer mindestens so groß wie das angezeigte.
Das Ladeintervall beeinflusst:
Größere Intervalle verringern die Häufigkeit der Ladevorgänge, da bereits geladene Daten zwischengespeichert werden.
Größere Intervalle bedeuten mehr Daten pro Anfrage, was die Verarbeitungszeit erhöht.
Anfragen haben folgendes Format:
some.php?from=DATEHERE&to=DATEHERE
wobei DATEHERE ein gültiges Datum im durch die Option load_date festgelegten Format ist.
Bei Verwendung von dhtmlxConnector auf der Serverseite ist keine zusätzliche Verarbeitung zur Auswertung dieser Anfragen erforderlich.
Beim Arbeiten mit großen Datenmengen ist es hilfreich, einen Lade-Spinner anzuzeigen, um den Fortschritt zu visualisieren.
Der Lade-Spinner kann aktiviert werden, indem die Eigenschaft show_loading auf true gesetzt wird:
scheduler.config.show_loading = true;
...
scheduler.init('scheduler_here',new Date(2018,0,10),"month");
Um das Spinner-Bild anzupassen, ersetzen Sie 'imgs/loading.gif' durch Ihr eigenes Bild.
Beim Laden von Daten in die Timeline- und Units-Ansichten muss ein Array von Abschnitten bereitgestellt werden.
Um Timeline- und Units-Abschnitte vom Backend zu laden, ist eine detailliertere Einrichtung erforderlich:
scheduler.createTimelineView({
....
y_unit: scheduler.serverList("sections"),
...
});
scheduler.load("data.json");
"data.json"
{
"data":[
{
"id":"1",
"start_date":"2018-03-02 00:00:00",
"end_date":"2018-03-04 00:00:00",
"text":"dblclick me!",
"type":"1"
},
{
"id":"2",
"start_date":"2018-03-09 00:00:00",
"end_date":"2018-03-11 00:00:00",
"text":"and me!",
"type":"2"
},
{
"id":"3",
"start_date":"2018-03-16 00:00:00",
"end_date":"2018-03-18 00:00:00",
"text":"and me too!",
"type":"3"
},
{
"id":"4",
"start_date":"2018-03-02 08:00:00",
"end_date":"2018-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"}
]
}
}
In diesem Beispiel enthält das "data"-Array die Kalendereinträge, während das "collections"-Objekt die Collections enthält, auf die über die Methode serverList verwiesen wird.
Nach oben