PHP code example of babasultan23 / dynamic-datatable
1. Go to this page and download the library: Download babasultan23/dynamic-datatable library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
babasultan23 / dynamic-datatable example snippets
'providers' => [
// ...
BabaSultan23\DynamicDatatable\DynamicDatatableServiceProvider::class,
],
'aliases' => [
// ...
'BabaSultan23DynamicDatatable' => BabaSultan23\DynamicDatatable\Facades\BabaSultan23DynamicDatatable::class,
]
use BabaSultan23\DynamicDatatable\Facades\BabaSultan23DynamicDatatable;
class YourController extends Controller
{
public function index()
{
$columns = [
['data' => 'id', 'title' => 'ID'],
['data' => 'name', 'title' => 'Ad'],
['data' => 'email', 'title' => 'E-posta'],
['data' => 'actions', 'title' => 'İşlemler', 'orderable' => 'false']
];
$dataTable = BabaSultan23DynamicDatatable::render(
tableId: 'my-table', // DataTable id <table id="{{ my-table }}" >
dataTableName: 'myDatatable', // DataTable adı var {{ myDatatable }} = $('#{{ $tableId }}').DataTable({
columns: $columns, // Tablo kolonları
fetchUrl: route('data.fetch'), // Veri çekme URL'i
title: 'Tablo Başlığı' // Tablo Başlığı <h2 class="pageheader-title">{{ $title }}</h2>
);
return view('your-view', compact('dataTable'));
}
}
BabaSultan23DynamicDatatable::setOrderMapping([ //tablodaki kolon adı => veri tabanı karşılığı
'full_name' => "CONCAT(students.name, ' ', students.surname)",
'lesson_name' => 'lessons.name',
]);
BabaSultan23DynamicDatatable::setSearchMapping([ //tablodaki kolon adı => veri tabanı karşılığı
'full_name' => "CONCAT(students.name, ' ', students.surname)",
'lesson_name' => 'lessons.name',
'email' => 'students.email',
'city' => 'students.city'
]);
BabaSultan23DynamicDatatable::setActionButtons(function($row) {
return '
<button onclick="edit('.$row->id.')" class="btn btn-warning">Düzenle</button>
<button onclick="delete('.$row->id.')" class="btn btn-danger">Sil</button>
';
});
BabaSultan23DynamicDatatable::setFormatResponse(function($query, $totalRecords, $filteredRecords) {
return DataTables::of($query)
->with([
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
])
->addColumn('full_name', function($row) {
return $row->first_name . ' ' . $row->last_name;
})
->addColumn('lesson_name', function ($data) {
return $data->lesson_name;
})
->filterColumn('full_name', function ($query, $keyword) {
$query->whereRaw("CONCAT(students.name, ' ', students.surname) LIKE ?", ["%{$keyword}%"]);
})
->filterColumn('lesson_name', function ($query, $keyword) {
$query->where('lessons.name', 'like', "%{$keyword}%");
})
->addColumn('actions', function($row) {
return BabaSultan23DynamicDatatable::getActionButtons($row);
})
->rawColumns(['actions'])
->make(true);
});
$dataTable = BabaSultan23DynamicDatatable::render(
....
....
return view('',compact('dataTable'));
BabaSultan23DynamicDatatable::render(
tableId: 'users-table', // DataTable id <table id="my-table" >
dataTableName: 'usersTable', // DataTable adı var myDatatable = $('#{{ $tableId }}').DataTable({
columns: $columns, // Tablo kolonları
fetchUrl: route('users.fetch'), // Veri çekme URL'i
title: 'Kullanıcılar', // Tablo Başlığı <h2 class="pageheader-title">{{ $title }}</h2>
options: [ // DataTable seçenekleri || boş array [] gönderilebilir. //default ayarlar config dosyası içerisinde yer almakta.
'pageLength' => 10, // default 10
'scrollX' => true,
'stateSave' => false,
],
filters: [
// Herhangi bir filtre olmaması durumunda [] şeklinde gönderebilirsiniz
// 'filters' => [] veya 'filters' => ['html' => [], 'js'=>[]] şeklinde kullanılabilir
'html' => '
<div class="row mb-3">
<div class="col-md-4">
<label for="cityFilter" class="filter-label">Şehir Seç:</label>
<select id="cityFilter" class="form-control city-select">
<option value="">Tüm Şehirler</option>
</select>
</div>
<div class="col-md-4">
<label for="dateFilter" class="filter-label">(Örnek) - Tarih:</label>
<input type="date" id="dateFilter" class="form-control">
</div>
<div class="col-md-4">
<label for="statusFilter" class="filter-label">(Örnek) - Durum:</label>
<select id="statusFilter" class="form-control">
<option value="">Tümü</option>
<option value="active">Aktif</option>
<option value="passive">Pasif</option>
</select>
</div>
</div>
',
'js' => [
'filterElements' => ['cityFilter', 'dateFilter', 'statusFilter'],
'filterData' => "
d.city = $('#cityFilter').val();
d.date = $('#dateFilter').val();
d.status = $('#statusFilter').val();
"
]
],
plusButton: true, // Alt menü butonu gösterimi | default : false. true olarak gönderildiğinde dinamik child tableda renderlanır
plusParentIdKey: 'parent_id' // Alt menü ilişki anahtarı => gönderilen değişkene request->değişken_adı ($request->parent_id) şeklinde ulaşılabilir.
);
['data' => 'plus', 'title' => '', 'orderable' => 'false']
->addColumn('plus', function ($data) {
if (Model::where('parent_id', $data->id)->count() > 0) {
return '<button class="btn btn-success sub-menu-button"><i class="fa fa-plus-circle"></i></button>';
}
})
$query = Model::query();
$parentId = $request->request_param ?? [];
if ($parentId != null && $parentId) {
$query = $query->where('parent_id', $parentId);
} else {
$query = $query->whereNull('parent_id');
}
public function fetch(Request $request)
{
$query = Student::query(); // Veri yalnızca query builder olarak sağlanmalıdır. all(), get(), take(), limit() gibi yöntemlerin kullanılması desteklenmemektedir.
$parentId = $request->parent_id ?? [];
if ($parentId != 'null' && $parentId) {
$query = $query->where('parent_id', $parentId);
} else {
$query = $query->whereNull('parent_id');
}
$query->leftJoin('lessons', 'students.lesson_id', '=', 'lessons.id') // Varsa relationlarınız bu şekilde eklenebilir
->select('students.*', 'lessons.name as lesson_name');
if (isset($request->city) && $request->city !== '') {
$query->where('students.city', $request->city);
}
$result = BabaSultan23DynamicDatatable::handleDataTableQuery($query, $request); //ZORUNLU
return BabaSultan23DynamicDatatable::formatDataTableResponse( //ZORUNLU
$result['query'],
$result['totalRecords'],
$result['filteredRecords']
);
}
BabaSultan23DynamicDatatable::setOrderMapping([...])
->setSearchMapping([...])
->setActionButtons(function($row) { ... })
->setFormatResponse(function($query, $totalRecords, $filteredRecords) { ... });
public function index()
{
$columns = [
['data' => 'id', 'title' => 'ID'],
['data' => 'plus', 'title' => '', 'orderable' => 'false'],
['data' => 'full_name', 'title' => 'Ad - Soyad'],
['data' => 'lesson_name', 'title' => 'Ders Adı'],
['data' => 'email', 'title' => 'Mail'],
['data' => 'city', 'title' => 'İl'],
['data' => 'actions', 'title' => 'İşlemler', 'orderable' => 'false']
];
$dataTable = BabaSultan23DynamicDatatable::render(
tableId: 'tableId',
dataTableName: 'dataTableName',
columns: $columns,
fetchUrl: route('fetchUrl'),
title: ' ... ',
options: [ ... ],
filters: [ ... ],
plusButton: true,
plusParentIdKey: 'plusParentIdKey'
);
$cities = ['Ankara', 'Istanbul', 'Izmir'];
$lessons = Lesson::all();
return view('package-test', compact('dataTable', 'cities', 'lessons'));
}
public function fetch(Request $request)
{
BabaSultan23DynamicDatatable::setOrderMapping([
'full_name' => "CONCAT(students.name, ' ', students.surname)",
'lesson_name' => 'lessons.name',
])
->setSearchMapping([
'email' => 'email',
'city' => 'students.city'
])
->setActionButtons(function ($row) {
return '<button onclick="updateStudent(' . $row->id . ')" class="btn btn-warning">Güncelle</button>
<button onclick="deleteStudent(' . $row->id . ')" class="btn btn-danger">Sil</button>';
})
->setFormatResponse(function ($query, $totalRecords, $filteredRecords) {
return DataTables::of($query)
->with([
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
])
->addColumn('plus', function ($data) {
if (Student::where('parent_id', $data->id)->count() > 0) {
return '<button class="btn btn-success sub-menu-button"><i class="fa fa-plus-circle"></i></button>';
}
})
->addColumn('addColumn', function ($data) {
return $data->addColumn;
})
->filterColumn('addColumnFilter', function ($query, $keyword) {
$query->where('addColumn', 'like', "%{$keyword}%");
})
->addColumn('actions', function ($row) {
return BabaSultan23DynamicDatatable::getActionButtons($row);
})
->rawColumns(['addColumn', 'addColumnFilter', 'plus', 'actions'])
->make(true);
});
$query = Model::query();
$result = BabaSultan23DynamicDatatable::handleDataTableQuery($query, $request);
return BabaSultan23DynamicDatatable::formatDataTableResponse(
$result['query'],
$result['totalRecords'],
$result['filteredRecords']
);
}
bash
php artisan vendor:publish --provider="BabaSultan23\DynamicDatatable\DynamicDatatableServiceProvider" --tag=config
php artisan vendor:publish --provider="BabaSultan23\DynamicDatatable\DynamicDatatableServiceProvider" --tag=crudAjax
bash
php artisan vendor:publish --provider="BabaSultan23\DynamicDatatable\DynamicDatatableServiceProvider" --tag=views <
path:
resources/babasultan23/dynamic-datatable/dynamic_datatable.blade.php
bash
path:
config/babasultan23-dynamic-datatable.php
javascript
Yukarıdaki eklemelerin tamamlandığı ve ilgili Blade dosyasına modal entegrasyonunun gerçekleştirildiği varsayılarak:
function createStudent() {
createAjax(
"studentDatatable", // DataTable Name
"create_student", // formId
"{{ route('student.create') }}", // URL
"#add-modal", // modalId
"Kayıt başarıyla oluşturuldu!" // successMessage (optional)
);
}
function deleteStudent(id) {
deleteAjax(
"studentDatatable", // DataTable Name
"", // formId
"{{ route('student.delete') }}", // URL
"", // modalId
"Kayıt başarıyla silindi!", // successMessage (optional)
id // Silinecek Datanın Id değeri
);
}
function updateStudent(id) {
var fieldMapping = { // Input ID - Returning Response Key
'nameUpdate': 'name',
'surnameUpdate': 'surname',
'cityUpdate': 'city',
'mailUpdate': 'email',
'updateId': 'updateId',
'lesson_idUpdate': 'lesson_id'
};
getAjaxData(
"studentDatatable", // DataTable Name (opsiyonel)
"{{ route('student.get') }}", // URL
"#update_modal", // modalId
fieldMapping, // fieldMapping parametresini gönderin
id // Veri ID'si
);
}
function updateStudentPost() {
updateAjax(
"studentDatatable", // DataTable Name
"update_student", // formId
"{{ route('student.update') }}", // URL
"#update_modal", // modalId
"Kayıt başarıyla güncellendi!" // successMessage (optional)
);
}