修改dhtmlxGantt以使用多个项目 - Laravel5

时间:2016-07-19 07:44:10

标签: javascript php laravel-5 dhtmlx

我在一个Laravel5项目中集成了dhtmlxGantt,一切都按预期工作。但我想修改它以存储多个项目的图表。为此,我想添加名为" project_id"的额外字段。并通过过滤器加载数据。

我尝试使用以下代码修改Controller:

$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文档,但没有得到任何解决方案。

我在研究中发现了这些链接,可能会有所帮助。

Link 1: Changing values before saving

Link 2: Filtering results based on a parameter

请帮助我以允许在不同图表上工作(加载和编辑)的方式修改我的项目。

1 个答案:

答案 0 :(得分:0)

最后我找到了解决方案。首先,您需要将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。