修改dhtmlxGantt以处理多个项目-Laravel5

Modify dhtmlxGantt to work with multiple projects - Laravel5

本文关键字:项目 -Laravel5 处理 dhtmlxGantt 修改      更新时间:2023-09-26

我已经在Laravel5项目中集成了dhtmlxGantt,一切都按预期进行。但我想修改它以存储多个项目的图表。为此,我想添加一个名为"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,它可以显示多个项目。