Я интегрировал dhtmlxGantt в проект Laravel5, и все работает как положено. Но я хочу изменить его, чтобы хранить графики для более чем одного проекта. Для этого я хочу добавить дополнительное поле с именем «project_id» и загрузить данные через фильтр.
Я попытался изменить контроллер с помощью следующего кода:
$connector->render_links(
GanttLink::where('user_id', '=', 1)->get(),
"id",
"source,target,type");
$connector->render_table(
GanttTask::where('user_id', '=', 1)->get(),
"id",
"start_date,duration,text,progress,parent");
Это решение позволило мне загрузить график из базы данных так, как я хотел. Но это не сохраняет изменения обратно в базу данных. Я просмотрел документацию dhtmlxGantt, но не нашел для этого решения.
Я нашел эти ссылки в своем исследовании и может быть полезным.
Ссылка 1: Изменение значений перед сохранением
Ссылка 2: Фильтрация результатов по параметру
Пожалуйста, помогите мне изменить мой проект таким образом, который позволяет работать (загружать и редактировать) на разных графиках.
Наконец я нашел решение. Во-первых, вам нужно добавить project_id
столбец таблицы базы данных, затем добавьте столбец в конфигурацию соединителя:
$connector->render_table(new GanttTask(), "id", "start_date,duration,text,progress,parent,project_id");
Затем вы должны внести некоторые изменения в код на стороне клиента. Используйте что-то вроде
var project_id = "<?php echo $project['id']; ?>";
чтобы взять переменную в <script>..</script>
Затем измените ваш код, добавив эти два обработчика на стороне клиента:
gantt.attachEvent("onBeforeTaskDisplay", function (id, task) {
if (task.project_id == project_id) {
return true;
}
return false;
});
а также
gantt.attachEvent("onBeforeTaskAdd", function (id, task) {
task.project_id = project_id;
});
Первый обработчик фильтрует результаты так, как вы хотите, прежде чем отображать диаграмму, а второй обработчик присоединяет project_id
свойство перед добавлением задачи. Теперь у вас есть dhtmlxGatt, который может отображать несколько проектов.
Других решений пока нет …