背景DHTMLXGantt和Laravel - 數據不擴展模板顯示
在從2016年1月本教程中,(https://dhtmlx.com/blog/using-dhtmlxgantt-with-laravel/)我開始DHTMLXGantt(V4.1)和Laravel(V5.4)試驗和遇到了一些麻煩,從mysql/mariadb數據庫中獲取樣本數據以顯示在甘特圖中。最初的麻煩與DHTMLX連接器在一些Laravel更改中沒有保持當前狀態有關。爲了其他人可能會閱讀本文並且正在努力解決相同的問題,我已經解決的兩個基本問題是:
(1)我被引用到這個[更新的]連接器,它與Laravel的最新版本兼容( https://github.com/mperednya/connector-php/tree/modern)。而且,
(2)我指定了相匹配的樣本數據(從2013年),如日期的日期範圍...
gantt.config.start_date = new Date(2013, 04, 01);
gantt.config.end_date = new Date(2013, 04, 30);
在這一點上我是能夠成功地使用Laravel作爲DHTMLXGantt圖表的後端服務器(包括使用示例數據讀寫)。
問題
我有現在正試圖從簡單的樣品移動,稍微複雜一些的問題。具體來說,當我使用Laravel的擴展模板時,我會在屏幕上繪製甘特圖,但在圖表中不顯示任何項目/任務數據。
爲了更具體地解釋這個問題,一個簡單的Laravel視圖包含了整個頁面,它可以像預期的那樣工作。例如,這個刀片文件(gantt.blade.php)起作用。
<!DOCTYPE html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<script src="codebase/dhtmlxgantt.js"></script>
<link rel="stylesheet" href="codebase/dhtmlxgantt.css">
<link rel="stylesheet" href="codebase/skins/dhtmlxgantt_skyblue.css" type="text/css" media="screen" title="no title" charset="utf-8">
</head>
<body>
<div class="container">
<h1>Placeholder Header</h1>
<div id="gantt_here" style='width:100%; height:500px;'></div>
<script type="text/javascript">
gantt.config.xml_date = "%Y-%m-%d %H:%i:%s";
gantt.config.step = 1;
gantt.config.scale_unit= "week";
gantt.config.autosize = "xy";
gantt.config.fit_tasks = true;
gantt.config.columns = [
{name:"text", label:"Task name", width:"*", tree:true },
{name:"start_date", label:"Start time", align: "center" },
{name:"duration", label:"Duration", align: "center" },
{name:"add", label:"", width:44 }
];
gantt.init("gantt_here");
gantt.load("./gantt_data", "xml");
var dp = new gantt.dataProcessor("./gantt_data");
dp.init(gantt);
</script>
<h1>Placeholder Footer</h1>
</div>
</body>
但是,如果我嘗試使用擴展的應用程序佈局建設了意向標準看&所有網頁上的感覺,甘特圖顯示,當我想到的是格式化的,但甘特圖中沒有數據顯示。這裏是頂級配置文件(app.blade.php)
<!DOCTYPE html>
<html lang="{{ config('app.locale') }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Styles -->
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
<link rel="stylesheet" href="codebase/dhtmlxgantt.css">
<link rel="stylesheet" href="codebase/skins/dhtmlxgantt_skyblue.css" type="text/css" media="screen" title="no title" charset="utf-8">
<!-- Scripts -->
<script>
window.Laravel = {!! json_encode([
'csrfToken' => csrf_token(),
]) !!};
</script>
<script src="codebase/dhtmlxgantt.js"></script>
</head>
<body>
<div id="app">
<!-- menus and other bootstrap styling removed for brevity -->
@yield('content')
</div>
<!-- Scripts -->
<script src="{{ asset('js/app.js') }}"></script>
</body>
</html>
而這裏的 「內容」 視圖(index.blade.php)...
@extends('layouts.app')
@section('content')
<div id="gantt_here" style='width:100%; height:500px;'></div>
<script type="text/javascript">
gantt.config.xml_date = "%Y-%m-%d %H:%i:%s";
gantt.config.step = 1;
gantt.config.scale_unit= "week";
gantt.config.autosize = "xy";
gantt.config.fit_tasks = true;
gantt.config.columns = [
{name:"text", label:"Task name", width:"*", tree:true },
{name:"start_date", label:"Start time", align: "center" },
{name:"duration", label:"Duration", align: "center" },
{name:"add", label:"", width:44 }
];
gantt.init("gantt_here");
gantt.load("./gantt_data", "xml");
var dp = new gantt.dataProcessor("./gantt_data");
dp.init(gantt);
</script>
</div>
@endsection
其他的事情我已經嘗試:
使用Chrome開發人員工具,我可以看到在這兩個示例中xml數據已正確傳遞到瀏覽器。這讓我想,也許這是某種時機問題。所以我在頁面上放了幾個鏈接來測試清除圖表並重新加載它。但仍然沒有改變。
<a onclick="gantt.clearAll()" href="javascript:void(0);">Clear</a>
<a onclick="gantt.load('./gantt_data', 'xml')" href="javascript:void(0);">Refresh</a>
我也嘗試將div塊「gantt_here」移動到Laravel模板指令上下的各個其他位置。它在所有情況下都會失敗,除非這個div塊在「app.blade.php」中的「app」div標籤之外(高於或低於),這當然會破壞我試圖達到的目的。
我的目標是在Laravel的擴展模板功能中使用此圖表。但我無法弄清楚什麼是錯的。有任何想法嗎?
我只是努力設置和測試。除了按照指示使用新的軟件包(沒有這個失敗),其他一切都按照本教程正常工作。即使使用partials和佈局也沒問題。我使用了教程中提供的示例項目存檔中的JavaScript文件。 – Sandeesh