Ajax не является обязательным источником для заполнения вашей DataTable, это всего лишь (широко предпочтительный) вариант, который позволяет вам обновлять данные без перезагрузки страницы (например, после редактирования определенных записей или их удаления).
Что вам нужно сделать, так это PHP-скрипт, который будет отображать простую HTML-страницу со всеми необходимыми предпосылками (включая jQuery и JavaScript-таблицы данных и таблицы стилей), указанную в разделе <head>
и пустую <table id="mytable"></table>
на странице <body>
.
В дополнение к вышеперечисленным предварительным условиям вам необходимо сослаться на своей странице HTML на динамически создаваемый javascript, который использует массивы объектов (полученные из SQL-очередей) в качестве источника DataTables для родительских и дочерних строк:
<?php
/* query your database over here and put the result into associative arrays,
turn them into JSON-compliant arrays/objects */
$parentSource = ... //PHP variable that contains JSON for parent rows
$childSource = ... //PHP variable that contains JSON for child rows
$js = <<<JS
$(document).ready(function () {
const parentData = ${$parentSource};
const childData = ${$childSource};
const dataTable = $('#mytable').DataTable({
sDom: 't',
data: parentData,
columns: [
{title: 'Hostname', data: 'hostname'},
{title: 'VLAN', data: 'vlan'},
{title: 'Location', data: 'location'},
],
});
//prepare child DataTable upon clicking parent row
$('#mytable').on('click', 'tr', function(){
const parentRow = dataTable.row($(this));
parentRow.child.isShown() ?
parentRow.child.remove() :
parentRow.child('<table id="details"></table>').show();
$(this).toggleClass('shown');
if(!parentRow.child.isShown()) return;
const detailsData = childData[parentRow.data().hostname];
$('#details').DataTable({
sDom: 't',
data: detailsData,
columns: [
{title: 'Hostname', data: 'hostname'},
{title: 'Port', data: 'port'},
{title: 'Port type', data: 'porttype'},
{title: 'VLAN', data: 'vlan'},
{title: 'Destination host', data: 'dsthost'},
{title: 'Destination port', data: 'dstport'},
]
});
});
});
JS;
/* here should go the code to insert above JS code as a <script>
into your page */
?>
Надеюсь, я ясно изложил свою точку зрения, несмотря на возможные ошибки в PHP (поскольку я некоторое время не использовал PHP).
Вы можете найти работающую demo более здесь .