
Postingan kali ini akan membahas mengenai datatables, atau cara lain menampilkan datatables yaitu dengan json. Sebelumnya ada di artikel ini dengan judul Menampilkan Database Server Side dengan jQuery Datatables
Selain itu kali ini akan dibahas mengenai bagaimana cara menampilkan group di datatables. Berikut contoh tampilan hasilnya.

Jadi bisa di lihat diatas bahwa baris “My Company” awalnya merupakan kolom pada datatables. Dibawah merupakan kode lengkap untuk menampilkan grouping, dan juga ada custom filter dan penomoran otomatis.
var division = $('#DT_division').DataTable({
"autoWidth": false,
"lengthChange": true,
"searching": true,
"ordering": true,
"info": true,
"responsive": true,
"lengthMenu": [[5, 10, 25, 50, 100, -1], [5, 10, 25, 50, 100, "All"]],
"pagingType": "full_numbers",
"language": {
"oPaginate": {
'sNext': '<i class="fa fa-angle-right"></i>',
'sPrevious': '<i class="fa fa-angle-left"></i>',
'sFirst': '<i class="fa fa-angle-double-left"></i>',
'sLast': '<i class="fa fa-angle-double-right"></i>'
}
},
"ajax": {
url: URL + "setting/master/division/division_data",
dataSrc: 'data'
},
"initComplete": function () {
this.api().columns([3]).every(function () {
var column = this;
var select = $('<select class="form-control select2" style="width: 100%;"><option value="">** All</option></select>')
.appendTo($("#divisionId").empty())
.select2()
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search(val ? '^' + val + '$' : '', true, false)
.draw();
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>');
});
});
},
"columns": [
{ data: 'id', className: "text-center", orderable: false },
{ data: 'companyId' },
{ data: 'divisionCode' },
{ data: 'divisionName' },
{ data: 'status' },
{
data: 'action',
title: '<i class="fa fa-ellipsis-h"></i>',
className: "text-center",
orderable: false,
},
],
"rowGroup": {
startRender: function (rows, group, level) {
if (level === 0) {
return group;
}
else if (level === 1) {
return group +' ('+rows.count()+' rows)';
}
},
dataSrc: ["companyId"]
},
"columnDefs": [
{
"visible": false,
"targets": [1]
}
],
});
division.on( 'draw.dt', function () {
var PageInfo = $('#DT_division').DataTable().page.info();
division.column(0, { page: 'current' }).nodes().each( function (cell, i) {
cell.innerHTML = i + 1 + PageInfo.start;
});
$("#totalData").html(PageInfo.recordsDisplay+' Records');
});
Jangan lupa pada table berikan ID id=”DT_division” supaya table bisa dikenali oleh kode baris diatas.
Pada baris ini untuk menampilkan custom filter (select2), sumber datanya berasal dari kolom “divisionName” dengan tampilan berikut:
"initComplete": function () {
this.api().columns([3]).every(function () {
var column = this;
var select = $('<select class="form-control select2" style="width: 100%;"><option value="">** All</option></select>')
.appendTo($("#divisionId").empty())
.select2()
.on('change', function () {
var val = $.fn.dataTable.util.escapeRegex(
$(this).val()
);
column
.search(val ? '^' + val + '$' : '', true, false)
.draw();
});
column.data().unique().sort().each(function (d, j) {
select.append('<option value="' + d + '">' + d + '</option>');
});
});
},

Pada baris ini untuk menampilkan Jumlah Entries dan auto number ketika pencarian data dilakukan.
division.on( 'draw.dt', function () {
var PageInfo = $('#DT_division').DataTable().page.info();
division.column(0, { page: 'current' }).nodes().each( function (cell, i) {
cell.innerHTML = i + 1 + PageInfo.start;
});
$("#totalData").html(PageInfo.recordsDisplay+' Records');
});
Terakhir, untuk menampilkan grouping terdapat pada baris kode berikut:
"rowGroup": {
startRender: function (rows, group, level) {
if (level === 0) {
return group;
}
else if (level === 1) {
return group +' ('+rows.count()+' rows)';
}
},
dataSrc: ["companyId"]
},
"columnDefs": [
{
"visible": false,
"targets": [1]
}
],
Dijelaskan diatas bahwa group tersebut bisa terdiri dari 2 level grouping yaitu level 0 dan level 1, pada scrip diatas hanya dilakukan 1 level saja yaitu grouping berdasarkan companyId kemudian di hide dari kolom.
Data json hanya contoh, silakan custom sendiri pada query yang digunakan.
header("Content-Type: application/json; charset=UTF-8");
$result = $db->query("QUERY Anda disini");
$data = [];
$i = 0;
foreach ($result as $row)
{
$data[] = [
"id" => $i+1,
"divisionId" => $row->divisionId,
"companyId" => $row->companyName,
"divisionCode" => $row->divisionCode,
"divisionName" => $row->divisionName,
"status" => $row->status',
"action" => ''
];
$i++;
}
$response = [
"draw" => 0,
"recordsTotal" => intval(count($result)),
"recordsFiltered" => intval(count($result)),
"data" => $data,
"success" => true,
"timestamp" => time()
];
echo json_encode($response);
Kurang lebih hasil akhir akan seperti berikut

Author Profile
- Hi my name is Ricki, I am a blogger from Indonesia. Founder of erkamoo.com, Besides creating Web Applications, I also write about Blogging Tips and Tutorials on Programming, Databases, HTML.
Latest entries
Intro3 Januari 2025Manfaat Mindfulness untuk Kesehatan dan Produktivitas Pekerjaan di Tahun Baru
Tips & Trick3 Desember 202410 Rekomendasi Situs Download Game MOD (Terlengkap)
Tips & Trick3 November 202410 Emulator Game Android di PC dan Laptop yang Paling Digemari
Intro2 November 2024Handphone yang Paling Digemari di Indonesia