Я использую библиотеки с открытым исходным кодом vis.js .
https://visjs.org/
Структура папок с расширенными возможностями Yii2
{app-root}
- внешний интерфейс
- assets
- контроллеры
- {foldername} Контроллер. php
- views
- поставщик
Добавьте требование composer.json:
Добавьте следующее в ваш composer.json: "bower-asset/vis": "*"
Затем запустите composer update
для установкиthe libray.
Убедитесь, что Composer Config
Убедитесь, что в вашей конфигурации композитора есть место для установки библиотеки vis в виде vendor / bower-assets.
"config": {
"process-timeout": 1800,
"fxp-asset": {
"installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
},
Создание AssetBundle
Создание файла в вашем приложении: frontend/assets/VisAsset.php
<?php
namespace frontend\assets;
use yii\web\AssetBundle;
/**
* vis.js asset bundle.
*/
class VisAsset extends AssetBundle
{
//public $basePath = '@webroot';
//public $baseUrl = '@web';
public $sourcePath = '@bower';
public $css = [
'vis/dist/vis.css',
];
public $js = [
'vis/dist/vis.js',
];
public $depends = [
//'yii\web\YiiAsset',
//'yii\bootstrap\BootstrapAsset',
];
}
Создание сценария workflow.js
Созданиеfile: 'frontend / views / {имя-папки} /workflow.js'
var nodesArray = [
{id: 1, label: 'A-Label'},
{id: 2, label: 'B-LAbel'},
];
var edgesArray = [
{from: 1, to: 2},
];
var nodes = new vis.DataSet(nodesArray);
var edges = new vis.DataSet(edgesArray);
// create a network
var container = document.getElementById('mynetwork');
container.innerHTML = 'Loading';
var data = {
nodes: nodes,
edges: edges
};
var height = 400;
var width = 900;
var options = {
autoResize: true,
height: height +'px',
width: width + 'px',
layout: {
hierarchical: {
enabled:false,
//levelSeparation: 150,
//nodeSpacing: 200,
//treeSpacing: 200,
//blockShifting: true,
//edgeMinimization: true,
//parentCentralization: true,
//direction: 'UD', // UD, DU, LR, RL
//sortMethod: 'directed' // hubsize, directed
}
},
nodes: {
shape: 'box',
margin: {
top: 10,
bottom: 10,
left: 10,
right: 10
},
font: {
size: 18
},
},
physics: false,
};
window.network = new vis.Network(container, data, options);
Обновление вида
В вашем frontend/views/{folder-name}/view.php
файле добавьте:
//Register the vis.js and vis.css vendor files.
app\assets\VisAsset::register($this);
$this->registerJs($this->render('workflow.js'));
и
<div id="mynetwork" style=""></div>