Это руководство описывает процесс настройки базового диаграммы Ганта, которая может сохранять и обновлять задачи в базе данных (на сервере).
Этот учебник сосредоточен на создании диаграммы Ганта с использованием dhtmlxConnector. Если вы планируете использовать другую серверную технологию, доступны другие учебники для различных интеграций:
Related sample: Basic initialization
Для начала вам нужно загрузить пакет библиотеки Gantt.
Далее, включите файлы кода библиотеки Gantt в ваш HTML файл, чтобы активировать ее функциональность.
Основные файлы для включения:
myGantt.html
<!DOCTYPE html>
<html>
<head>
<title>Как начать с dhtmlxGantt</title>
<script src="codebase/dhtmlxgantt.js"></script> <link href="codebase/dhtmlxgantt.css" rel="stylesheet"> </head>
<body>
//ваш код будет здесь
</body>
</html>
Теперь создайте контейнер DIV и инициализируйте в нем диаграмму Ганта. Обратите внимание, что dhtmlxGantt является статическим объектом и может быть создан только один раз на странице. Вы можете обращаться к нему, используя dhtmlxGantt
или gantt
.
myGantt.html
<!DOCTYPE html>
<html>
<head>
<title>Как начать с 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>
Если вы используете полноэкранный режим, убедитесь, что применили следующие стили для корректной работы:
<style type="text/css" media="screen"> html, body{
margin:0px;
padding:0px;
height:100%;
overflow:hidden;
}
</style>
Чтобы отобразить данные в диаграмме Ганта, используйте пример источника данных. Самый простой способ - определить данные как встроенный объект и загрузить их, используя метод gantt.parse
.
Объект данных имеет следующие свойства:
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
Если вы предпочитаете загружать данные из базы данных, а не из встроенного объекта, вам нужно будет настроить базу данных с двумя таблицами для хранения задач и зависимостей.
Свойство `sortorder` используется только при загрузке данных из базы данных. Оно определяет порядок задач среди дочерних элементов.
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`)
);
Чтобы обрабатывать задачи с пустыми значениями при сохранении в базу данных, добавьте этот код в myGantt.html
:
myGantt.html
gantt.attachEvent("onBeforeTaskAdd", function(id, task) {
task.sortorder = 0;
return true;
});
Чтобы загрузить данные из базы данных, используйте метод gantt.load
с URL серверного скрипта в качестве параметра. В этом примере мы будем использовать PHP и библиотеку dhtmlxConnector для упрощения серверной логики.
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');
Порядок столбцов в $connector->render_table играет ключевую роль. Первые три столбца автоматически связываются со свойствами start_date/duration/text или start_date/end_date/text объекта задачи на клиентской стороне, независимо от имен столбцов, которые вы используете. Вот как происходит сопоставление:
Если второй столбец называется 'duration' в вашей конфигурации, он будет соответствовать task.duration:
$gantt->render_table("gantt_tasks","id","Start,duration,Name,progress,parent","");
Вы также можете использовать псевдоним для того же результата:
$gantt->render_table("gantt_tasks","id","Start,Length(duration),Name,progress,parent","");
// JS: task.start_date, task.duration, task.text, task.progress, task.parent
С другой стороны, если второй столбец имеет любое другое имя, он будет сопоставлен со свойством end_date:
$gantt->render_table("gantt_tasks","id","Start,End,Name,progress,parent","");
// JS: task.start_date, task.end_date, task.text, task.progress, task.parent
Оставшиеся столбцы будут сопоставлены напрямую на основе их имен:
$gantt->render_table("gantt_tasks","id","start_date,duration,text,custom,parent","");
// JS: task.start_date, task.duration, task.text, task.custom, task.parent
Псевдонимы также могут быть применены к этим дополнительным столбцам:
$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
Чтобы позволить сохранять изменения, внесенные в диаграмму Ганта, обратно в базу данных, используется вспомогательная библиотека dataProcessor. Это включает инициализацию DataProcessor и связывание его с объектом dhtmlxGantt.
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);
Если все кажется настроенным правильно, но проблемы сохраняются, включение логирования в Gantt может помочь выявить проблему.
Сначала убедитесь, что каталог, содержащий HTML файл, имеет права на запись. Затем добавьте эту строку в файл data.php:
data.php
$gantt = new JSONGanttConnector($res);
$gantt->enable_log("log.txt");
Это создаст файл log.txt, где вы можете проверить журналы ошибок.
На данном этапе у вас есть базовая диаграмма Ганта, которая может загружать данные из базы данных и сохранять обновления обратно. Теперь вы можете приступить к настройке и адаптации ее в соответствии с вашими конкретными требованиями.
Для дальнейшего изучения могут быть полезны следующие статьи:
К началу