Diese Anleitung führt Sie durch die Einrichtung eines grundlegenden Gantt-Diagramms, das Aufgaben in einer Datenbank (auf dem Server) speichern und aktualisieren kann.
Dieses Tutorial konzentriert sich auf die Erstellung eines Gantt-Diagramms mit dhtmlxConnector. Wenn Sie eine andere serverseitige Technologie verwenden möchten, stehen weitere Tutorials für verschiedene Integrationen zur Verfügung:
Related sample: Basic initialization
Zuerst müssen Sie das Gantt-Bibliothekspaket herunterladen.
Als Nächstes binden Sie die Code-Dateien der Gantt-Bibliothek in Ihre HTML-Datei ein, um deren Funktionalität zu aktivieren.
Die Hauptdateien, die eingebunden werden müssen, sind:
myGantt.html
<!DOCTYPE html>
<html>
<head>
<title>How to Start with dhtmlxGantt</title>
<script src="codebase/dhtmlxgantt.js"></script> <link href="codebase/dhtmlxgantt.css" rel="stylesheet"> </head>
<body>
//Ihr Code wird hier sein
</body>
</html>
Erstellen Sie nun einen DIV-Container und initialisieren Sie das Gantt-Diagramm darin. Beachten Sie, dass dhtmlxGantt ein statisches Objekt ist und nur einmal auf einer Seite instanziiert werden kann. Sie können darauf mit dhtmlxGantt
oder gantt
verweisen.
myGantt.html
<!DOCTYPE html>
<html>
<head>
<title>How to Start with dhtmlxGantt</title>
<script src="codebase/dhtmlxgantt.js"></script>
<link href="codebase/dhtmlxgantt.css" rel="stylesheet">
</head>
<body>
<div id="gantt_here" style='width:1000px; height:400px;'></div>
<script type="text/javascript"> gantt.init("gantt_here");
</script>
</body>
</html>
Wenn Sie den Vollbildmodus verwenden, stellen Sie sicher, dass Sie die folgenden Stile für eine ordnungsgemäße Funktionalität anwenden:
<style type="text/css" media="screen"> html, body{
margin:0px;
padding:0px;
height:100%;
overflow:hidden;
}
</style>
Um Daten im Gantt-Diagramm anzuzeigen, verwenden Sie eine Beispieldatenquelle. Der einfachste Weg ist, die Daten als Inline-Objekt zu definieren und sie mit der Methode gantt.parse
zu laden.
Das Datenobjekt hat die folgenden Eigenschaften:
myGantt.html
var tasks = {
data:[
{id:1, text:"Project #1",start_date:"01-04-2013", duration:11, progress: 0.6, open: true},
{id:2, text:"Task #1", start_date:"03-04-2013", duration:5, progress: 1, open: true, parent:1},
{id:3, text:"Task #2", start_date:"02-04-2013", duration:7, progress: 0.5, open: true, parent:1},
{id:4, text:"Task #2.1", start_date:"03-04-2013", duration:2, progress: 1, open: true, parent:3},
{id:5, text:"Task #2.2", start_date:"04-04-2013", duration:3, progress: 0.8, open: true, parent:3},
{id:6, text:"Task #2.3", start_date:"05-04-2013", duration:4, progress: 0.2, open: true, parent:3}
],
links:[
{id:1, source:1, target:2, type:"1"},
{id:2, source:1, target:3, type:"1"},
{id:3, source:3, target:4, type:"1"},
{id:4, source:4, target:5, type:"0"},
{id:5, source:5, target:6, type:"0"}
]
};
myGantt.html
gantt.init("gantt_here");
gantt.parse(tasks);
Related sample: Basic initialization
Wenn Sie lieber Daten aus einer Datenbank als aus einem Inline-Objekt laden möchten, müssen Sie eine Datenbank mit zwei Tabellen einrichten, um Aufgaben und Abhängigkeiten zu speichern.
Die Eigenschaft `sortorder` wird nur beim Laden von Daten aus einer Datenbank verwendet. Sie bestimmt die Reihenfolge der Aufgaben unter Geschwistern.
CREATE TABLE `gantt_links` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`source` INT(11) NOT NULL,
`target` INT(11) NOT NULL,
`type` VARCHAR(1) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `gantt_tasks` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`text` VARCHAR(255) NOT NULL,
`start_date` datetime NOT NULL,
`duration` INT(11) NOT NULL DEFAULT 0,
`progress` FLOAT NOT NULL DEFAULT 0,
`sortorder` INT(11) NOT NULL DEFAULT 0,
`parent` INT(11) NOT NULL,
PRIMARY KEY (`id`)
);
Um Aufgaben mit leeren Werten beim Speichern in der Datenbank zu behandeln, fügen Sie diesen Code zu myGantt.html
hinzu:
myGantt.html
gantt.attachEvent("onBeforeTaskAdd", function(id, task) {
task.sortorder = 0;
return true;
});
Um Daten aus einer Datenbank zu laden, verwenden Sie die Methode gantt.load
mit der URL eines serverseitigen Skripts als Parameter. Für dieses Beispiel verwenden wir PHP und die dhtmlxConnector-Bibliothek, um die serverseitige Logik zu vereinfachen.
data.php
<?php
include ('codebase/connector/gantt_connector.php');
$res = new PDO("mysql:host=localhost;dbname=gantt", "root", "");
$gantt = new JSONGanttConnector($res);
$gantt->render_links("gantt_links","id","source,target,type");
$gantt->render_table(
"gantt_tasks",
"id",
"start_date,duration,text,progress,sortorder,parent"
);
?>
myGantt.html
gantt.config.date_format = "%Y-%m-%d %H:%i"; gantt.init("gantt_here");
myGantt.html
gantt.config.date_format = "%Y-%m-%d %H:%i";
gantt.init("gantt_here");
gantt.load('data.php');
Die Reihenfolge der Spalten in $connector->render_table spielt eine entscheidende Rolle. Die ersten drei aufgeführten Spalten werden automatisch mit den start_date/duration/text- oder start_date/end_date/text-Eigenschaften des Aufgabenobjekts auf der Client-Seite verknüpft, unabhängig von den verwendeten Spaltennamen. So funktioniert die Zuordnung:
Wenn die zweite Spalte in Ihrer Konfiguration 'duration' genannt wird, wird sie zu task.duration zugeordnet:
$gantt->render_table("gantt_tasks","id","Start,duration,Name,progress,parent","");
Sie können auch ein Alias verwenden, um das gleiche Ergebnis zu erzielen:
$gantt->render_table("gantt_tasks","id","Start,Length(duration),Name,progress,parent","");
// JS: task.start_date, task.duration, task.text, task.progress, task.parent
Andererseits, wenn die zweite Spalte einen anderen Namen hat, wird sie der end_date-Eigenschaft zugeordnet:
$gantt->render_table("gantt_tasks","id","Start,End,Name,progress,parent","");
// JS: task.start_date, task.end_date, task.text, task.progress, task.parent
Die verbleibenden Spalten werden direkt basierend auf ihren Namen zugeordnet:
$gantt->render_table("gantt_tasks","id","start_date,duration,text,custom,parent","");
// JS: task.start_date, task.duration, task.text, task.custom, task.parent
Aliase können auch auf diese zusätzlichen Spalten angewendet werden:
$gantt->render_table("gantt_tasks","id",
"start_date,duration,text,custom_column(customProperty),parent","");
// JS: task.start_date, task.duration, task.text, task.customProperty, task.parent
Um das Speichern von Änderungen, die im Gantt-Diagramm vorgenommen wurden, in der Datenbank zu ermöglichen, wird die dataProcessor-Hilfsbibliothek verwendet. Dies beinhaltet die Initialisierung des DataProcessors und die Verknüpfung mit dem dhtmlxGantt-Objekt.
dataProcessor("data.php")
ein.dp.init(gantt)
.
myGantt.html
gantt.init("gantt_here");
gantt.load('data.php');
var dp = new gantt.dataProcessor("data.php"); dp.init(gantt);
Wenn alles korrekt eingerichtet zu sein scheint, aber Probleme weiterhin bestehen, kann die Aktivierung der Protokollierung in Gantt helfen, das Problem zu identifizieren.
Stellen Sie zunächst sicher, dass das Verzeichnis, das die HTML-Datei enthält, Schreibberechtigungen hat. Fügen Sie dann diese Zeile zur data.php-Datei hinzu:
data.php
$gantt = new JSONGanttConnector($res);
$gantt->enable_log("log.txt");
Dadurch wird eine log.txt-Datei erstellt, in der Sie nach Fehlerprotokollen suchen können.
An diesem Punkt haben Sie ein grundlegendes Gantt-Diagramm, das Daten aus einer Datenbank laden und Aktualisierungen darin speichern kann. Jetzt können Sie sich mit der Konfiguration und Anpassung befassen, um es an Ihre spezifischen Anforderungen anzupassen.
Für weitere Erkundungen könnten diese Artikel hilfreich sein:
Zurück nach oben