Complete Datatable Setup
In this article, we will discuss the complete Datatable Setup. In this tutorial, I will show you how to setup server-side ajax record, pagination, responsive tables, column visibility control and most important the use button extensions. Datatable Button extension allows us to create an option to Export data to Excel, CSV, PDF and also print the data.
I’m building an example with the Laravel framework. So I’m assuming you are familiar with the Laravel basics. If no then please follow some of the given tutorials or check back our other articles.
- Laravel Setup
- Laravel Default Authentication Setup
- Understanding Laravel Middleware
- All You Need to Know Laravel Routing
- Setup Virtual Host with Xampp Server
Table of Contents
Step 1: Add the required libraries for CSS and javascript.
// Styles // Datatable core style <link rel="stylesheet" href="{{ asset('assets/lib/datatables/jquery.dataTables.css') }}"> // Datatable Button extension styles <link rel="stylesheet" href="https://cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.min.css"> // JS // Datatable Js <script src="{{ asset('assets/lib/datatables/jquery.dataTables.js') }}"></script> // Datatable Responsive Support <script src="{{ asset('assets/lib/datatables-responsive/dataTables.responsive.js') }}"></script> // Button extension // Buttons for export excel / csv <script src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.html5.min.js"></script> <script src="https://cdn.datatables.net/buttons/1.5.1/js/dataTables.buttons.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script> // Button for PDF export <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/vfs_fonts.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/pdfmake.min.js"></script> <script src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.print.min.js"></script> // Button for print <script src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js"></script>
Step 2: Create HTML table, where we apply datatable.
<div class="table-wrapper"> <table id="dt_Table" class="table display responsive nowrap"> <thead> <tr> <th>First Name</th> <th>Last Name</th> <th>Email</th> <th>Mobile No</th> <th>Status</th> </tr> </thead> <tbody> <!-- Ajax Load --> </tbody> </table> </div>
In the above code, tbody is empty, and it’s updated with the ajax response.
Step 3: Let’s add the js which apply datatable to our HTML table.
// Add specific class name to all the buttons $.fn.dataTable.Buttons.defaults.dom.button.className = 'btn'; // Datatable var dt_Table = $('#dt_Table').DataTable({ // Call ajax to load records "ajax": Laravel.appUrl+'/customers/json', // Mapping data "columns": [ { data: first_name }, { data: last_name }, { data: email }, { data: 'mobileno' }, { data: 'email' }, { data: null }, ], // Manage length of record dropdown "bLengthChange": false, // Manage Search "searching": false, // Manage sorting asc or desc "ordering": false, // Manage responsive "responsive": true, "autoWidth": false, // Manage template dom: 'Bfrtip', // Manage buttons dropdown buttons: [ { extend: 'collection', text: 'Options', // Label className: '', // class name buttons: [ { extend: 'excelHtml5', // Export to excel button className: '', // class name exportOptions: { columns: ':visible' // Only visible columns available for export } }, { extend: 'csvHtml5', // Export to CSV button className: '', // class name exportOptions: { columns: ':visible' // Only visible columns available for export } }, { extend: 'pdfHtml5', // Export to PDF button className: '', // class name exportOptions: { columns: ':visible' // Only visible columns available for export } }, { extend: 'print', // Print button className: '', // class name exportOptions: { columns: ':visible' // Only visible columns available for export } } ] }, { extend: 'colvis', // Manage column visibity className: '', // class name text: 'Columns' // Label }, { text: 'Custom Button', // Label for custom button className: '', // class name action: function ( e, dt, node, config ) { // Custom Button // Add event for this custom button such as click, change or etc. } } ] });
Step 4: Here’s getJson method of customer controller.
/** * List of customers */ public function getJson() { $customers = App\Customer::get(); return response()->json([ 'data' => $customers ]); }
Step 5: Register route for this function.
Route::get('/customers/json','CustomerController@getJson')->middleware('ajax');
Finally, Datatable integration is done. In this tutorial, I’m trying to explain you basic setup of the Datatable. We will discuss more on datatables in future article. Feel free to comment if any query.
If you like our content, please consider buying us a coffee.
Thank you for your support!
Buy Me a Coffee