Dieses Tutorial erklärt, wie Sie ein einfaches Gantt-Diagramm auf einer Webseite einrichten, das Aufgaben in einer Datenbank (auf dem Server) speichern und aktualisieren kann.
Der Fokus liegt hier auf dem Aufbau eines Gantt-Diagramms mit dhtmlxConnector. Wenn Sie eine andere serverseitige Technologie bevorzugen, finden Sie unten Tutorials für verschiedene Integrationsoptionen:
Related sample: Basic initialization
Laden Sie zunächst das Bibliothekspaket auf Ihren Computer herunter.
Als Nächstes binden Sie die dhtmlxGantt-Code-Dateien in Ihre HTML-Datei ein, damit Sie die Funktionen der Bibliothek nutzen können. Die benötigten dhtmlxGantt-Dateien 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>
//your code will be here
</body>
</html>
Erstellen Sie anschließend einen DIV-Container und initialisieren Sie dhtmlxGantt darin.
Beachten Sie, dass dhtmlxGantt ein statisches Objekt ist und nur einmal pro Seite instanziiert werden kann.
Sie können auf die dhtmlxGantt-Instanz mit dhtmlxGantt oder einfach gantt zugreifen.
gantt.init("gantt_here")
. Diese Methode erwartet die ID des HTML-Containers, in dem das Gantt-Diagramm angezeigt werden soll.
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, fügen Sie dieses CSS hinzu, um eine korrekte Darstellung sicherzustellen:
<style type="text/css" media="screen"> html, body{
margin:0px;
padding:0px;
height:100%;
overflow:hidden;
}
</style>
Jetzt füllen wir das Gantt-Diagramm mit Daten aus einer Beispiel-Datenquelle. Wir halten es einfach und verwenden ein Inline-Objekt als Datenquelle.
Zum Laden der Daten verwenden wir die
parse-Methode, die die Datenquelle als Parameter erhält.
Die Objekt-Eigenschaften sind:
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"}
]
};
gantt.parse(tasks)
direkt nach gantt.init("gantt_here")
hinzu:myGantt.html
gantt.init("gantt_here");
gantt.parse (tasks);
Related sample: Basic initialization
Dieser und die folgenden Schritte gelten, wenn Sie Daten aus einer Datenbank laden möchten, anstatt Inline-Daten zu verwenden.
Erstellen Sie als Nächstes eine Datenbank mit zwei Tabellen zur Speicherung von Aufgaben und Abhängigkeiten.
sortorder ist eine Eigenschaft, die nur beim Laden von Daten aus der Datenbank verwendet wird. Sie legt die Reihenfolge der Aufgaben unter Geschwistern fest.
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`)
);
Damit Aufgaben auch dann korrekt gespeichert werden, wenn einige Felder leer sind, fügen Sie diesen Code in Ihre myGantt.html ein:
myGantt.html
gantt.attachEvent("onBeforeTaskAdd", function(id,task){
task.sortorder = 0;
return true;
});
In den nächsten beiden Schritten wird PHP für die Server-Client-Integration verwendet.
Wenn Sie eine andere Plattform nutzen, lesen Sie den Artikel Datenladen, um zu erfahren, wie Sie Ihr eigenes Serverskript implementieren.
Jetzt aktivieren wir das Laden von Daten aus der Datenbank in das Diagramm. Dies geschieht mit der load-Methode, die eine URL zur Datenquelle erwartet.
Für den Datenbankzugriff verweist diese URL auf eine PHP-Datei, die die Serverlogik übernimmt.
Wir verwenden PHP und die dhtmlxConnector-Bibliothek, die die serverseitige Integration für dhtmlxGantt vereinfacht.
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"
);
?>
gantt.config.date_format
auf "%Y-%m-%d %H:%i", damit das Datumsformat mit den Erwartungen von dhtmlxGantt übereinstimmt.
myGantt.html
gantt.config.date_format = "%Y-%m-%d %H:%i"; gantt.init("gantt_here");
gantt.load('data.php')
auf, um die Daten aus der Datenbank in das Gantt-Diagramm zu laden.
myGantt.html
gantt.config.date_format = "%Y-%m-%d %H:%i";
gantt.init("gantt_here");
gantt.load('data.php');//lädt Daten aus der Datenbank in das Gantt-Diagramm
Beachten Sie, dass die Reihenfolge der Spalten in $connector->render_table wichtig ist. Die ersten drei Spalten in der Liste entsprechen immer den Eigenschaften start_date/duration/text oder start_date/end_date/text des clientseitigen Task-Objekts, unabhängig davon, welche Spaltennamen Sie verwenden. Die Zuordnungslogik wird im Folgenden erläutert.
Die zweite Spalte wird der Eigenschaft task.duration zugewiesen, wenn 'duration' in der Konfiguration angegeben ist:
$gantt->render_table("gantt_tasks","id","Start,duration,Name,progress,parent","");
Alternativ mit einem Alias:
$gantt->render_table("gantt_tasks","id","Start,Length(duration),Name,progress,parent","");
// JS: task.start_date, task.duration, task.text, task.progress, task.parent
Wird ein anderer Spaltenname verwendet, wird die zweite Spalte mit der Eigenschaft end_date verknüpft:
$gantt->render_table("gantt_tasks","id","Start,End,Name,progress,parent","");
// JS: task.start_date, task.end_date, task.text, task.progress, task.parent
Alle weiteren Spalten werden direkt anhand ihres Namens ohne Änderungen 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
Auch für andere Spalten können Aliase verwendet 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
Als nächstes ist es wichtig, das Speichern von Änderungen, die im Gantt-Diagramm vorgenommen wurden, zurück in die Datenbank zu ermöglichen. Hierzu wird die Hilfsbibliothek dataProcessor verwendet. Der Vorgang umfasst die Initialisierung des DataProcessor und die Verknüpfung mit der dhtmlxGantt-Instanz.
dataProcessor("data.php")
.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 eingerichtet ist, aber weiterhin Probleme auftreten, kann das Aktivieren der Protokollierung in Gantt bei der Fehlersuche helfen.
Überprüfen Sie zunächst, ob das Verzeichnis, das die HTML-Datei enthält, über Schreibrechte verfügt. Fügen Sie dann diese Zeile in die Datei data.php ein:
data.php
$gantt = new JSONGanttConnector($res);
$gantt->enable_log("log.txt");
Sie können anschließend die Datei log.txt überprüfen, um die protokollierten Informationen einzusehen.
Das war's! Ein grundlegendes Gantt-Diagramm, das Daten aus der Datenbank laden und Änderungen zurückspeichern kann, ist nun eingerichtet. Ab jetzt können Sie es weiter anpassen und erweitern, um Ihre spezifischen Anforderungen zu erfüllen.
Für weitere Hinweise empfehlen wir folgende Artikel:
Zurück nach oben