dhtmlxScheduler с PHP:Laravel
В этом руководстве описывается интеграция dhtmlxScheduler в приложение на Laravel.
Также доступны руководства по серверной интеграции с использованием других платформ:
- dhtmlxScheduler с ASP.NET Core
- dhtmlxScheduler с ASP.NET MVC
- dhtmlxScheduler с Node.js
- dhtmlxScheduler с PHP
- dhtmlxScheduler с PHP: Slim
- dhtmlxScheduler с SalesForce LWC
- dhtmlxScheduler с Ruby on Rails
- dhtmlxScheduler с dhtmlxConnector
Вы можете ознакомиться с полной демонстрацией на GitHub или следовать пошаговым инструкциям ниже.
Полный исходный код размещён на GitHub.
Шаг 1. Инициализация проекта
Создание проекта
Начните с создания нового приложения Laravel с помощью Composer:
composer create-project laravel/laravel scheduler-howto-laravel
Этот процесс займет некоторое время для загрузки и настройки всех необходимых файлов. После завершения вы можете проверить установку, выполнив:
cd scheduler-howto-laravel
php artisan serve
На этом этапе вы должны увидеть стандартную приветственную страницу Laravel:

Шаг 2. Добавление Scheduler на страницу
Добавление представления
Далее добавьте новую страницу с dhtmlxScheduler в приложение. Создайте новый файл представления с именем scheduler.blade.php в директории resources/views:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-type" content="text/html; charSet="utf-8"">
<script src="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.js"></script>
<link href="https://cdn.dhtmlx.com/scheduler/edge/dhtmlxscheduler.css"
rel="stylesheet">
<style type="text/css">
html, body{
height:100%;
padding:0px;
margin:0px;
overflow: hidden;
}
</style>
</head>
<body>
<div id="scheduler_here" className="dhx_cal_container">
<div className="dhx_cal_navline">
<div className="dhx_cal_prev_button"> </div>
<div className="dhx_cal_next_button"> </div>
<div className="dhx_cal_today_button"></div>
<div className="dhx_cal_date"></div>
<div className="dhx_cal_tab" name="day_tab"></div>
<div className="dhx_cal_tab" name="week_tab"></div>
<div className="dhx_cal_tab" name="month_tab"></div>
</div>
<div className="dhx_cal_header"></div>
<div className="dhx_cal_data"></div>
</div>
<script type="text/javascript">
scheduler.init("scheduler_here");
</script>
</body>
Это создаёт базовую HTML-структуру, подключает ресурсы dhtmlxScheduler с CDN и инициализирует scheduler с помощью метода init.
Обратите внимание, что и body, и контейнер scheduler имеют высоту 100%. Поскольку scheduler подстраивается под размер контейнера, необходимо явно задать эти размеры.
Изменение маршрута по умолчанию
Чтобы сделать новую страницу доступной, обновите маршрут по умолчанию, чтобы при открытии приложения отображался scheduler.
Измените файл routes/web.php следующим образом:
<?php
Route::get('/', function () {
return view('scheduler');
});
Перезапустите приложение и убедитесь, что страница scheduler загружается:

Шаг 3. Подготовка базы данных
В данный момент scheduler пуст. Далее подключим его к базе данных и заполним данными.
Создание базы данных
Убедитесь, что вы настроили подключение к базе данных в файле .env, например:
DB_CONNECTION="mysql"
DB_HOST="127.0.0.1"
DB_PORT="3306"
DB_DATABASE="scheduler-test"
DB_USERNAME="root"
DB_PASSWORD=
После этого создайте классы моделей и миграции с помощью Artisan:
php artisan make:model Event --migration
Эта команда создаст файлы миграций в папке database/migrations. Определите схему таблицы на основе ожидаемой структуры таблицы для Scheduler.
Пример кода миграции для таб лицы Events:
<?php
use IlluminateSupportFacadesSchema;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateDatabaseMigrationsMigration;
class CreateEventsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('events', function (Blueprint $table) {
$table->increments('id');
$table->string('text');
$table->dateTime('start_date');
$table->dateTime('end_date');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('events');
}
}
Выполните миграцию для создания таблицы:
php artisan migrate
Если вы столкнулись с ошибкой "Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes" в старых версиях MySQL, выполните следующие шаги.
Для исправления откройте app/Providers/AppServiceProvider.php и добавьте следующий код в класс AppServiceProvider:
<?php
namespace AppProviders;
use IlluminateSupportServiceProvider;
use IlluminateSupportFacadesSchema; /*!*/
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Schema::defaultStringLength(191); /*!*/
}
...
}
Подробнее об этой ошибке здесь.
Далее создайте тестовые данные с помощью класса seeder:
php artisan make:seeder EventsTableSeeder
Добавьте тестовые события в EventsTableSeeder:
<?php
use IlluminateDatabaseSeeder;
class EventsTableSeeder extends Seeder
{
public function run()
{
DB::table('events')->insert([
['id'=>1, 'text'=>'Event #1', 'start_date'=>'2018-12-05 08:00:00',
'end_date'=>'2018-12-05 12:00:00'],
['id'=>2, 'text'=>'Event #2', 'start_date'=>'2018-12-06 15:00:00',
'end_date'=>'2018-12-06 16:30:00'],
['id'=>3, 'text'=>'Event #3', 'start_date'=>'2018-12-04 00:00:00',
'end_date'=>'2018-12-20 00:00:00'],
['id'=>4, 'text'=>'Event #4', 'start_date'=>'2018-12-01 08:00:00',
'end_date'=>'2018-12-01 12:00:00'],
['id'=>5, 'text'=>'Event #5', 'start_date'=>'2018-12-20 08:00:00',
'end_date'=>'2018-12-20 12:00:00'],
['id'=>6, 'text'=>'Event #6', 'start_date'=>'2018-12-25 08:00:00',
'end_date'=>'2018-12-25 12:00:00']
]);
}
}
Далее вызовите этот seeder из DatabaseSeeder.php:
<?php
use IlluminateDatabaseSeeder;
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call(EventsTableSeeder::class);
}
}
Наконец, заполните базу данных:
php artisan db:seed