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
use BabaSultan23\DynamicDatatable\Facades\BabaSultan23DynamicDatatable;
public function index()
{
$columns = [
['data' => 'id', 'title' => 'ID'],
['data' => 'name', 'title' => 'Ad Soyad'],
['data' => 'email', 'title' => 'E-posta'],
];
$dataTable = BabaSultan23DynamicDatatable::render(
tableId: 'my-table',
dataTableName: 'myDatatable',
columns: $columns,
fetchUrl: route('package.fetch'),
title: 'Veri Tablosu'
);
return view('package-test', compact('dataTable'));
}
public function fetch(Request $request)
{
$query = Student::query();
return BabaSultan23DynamicDatatable::processDataTableRequest($query, $request);
}
$columns = [
['data' => 'id', 'title' => 'ID'],
['data' => 'plus', 'title' => '', 'orderable' => 'false'],
['data' => 'full_name', 'title' => 'Ad Soyad'],
['data' => 'email', 'title' => 'E-posta'],
['data' => 'city', 'title' => 'Şehir'],
['data' => 'actions', 'title' => 'İşlemler', 'orderable' => 'false']
];
$filters = [
'html' => '
<div class="row mb-3">
<div class="col-md-4">
<label for="cityFilter">Şehir Seçin:</label>
<select id="cityFilter" class="form-control">
<option value="">Tüm Şehirler</option>
</select>
</div>
</div>
',
'js' => [
'filterElements' => ['cityFilter'],
'filterData' => "
d.city = $('#cityFilter').val();
"
]
];
BabaSultan23DynamicDatatable::render(
// ... diğer seçenekler ...
plusButton: true,
plusParentIdKey: 'parent_id'
);
BabaSultan23DynamicDatatable::setActionButtons(function ($row) {
return '<button onclick="kayitGuncelle(' . $row->id . ')" class="btn btn-warning">Güncelle</button>
<button onclick="kayitSil(' . $row->id . ')" class="btn btn-danger">Sil</button>';
});
BabaSultan23DynamicDatatable::setOrderMapping([
'full_name' => "CONCAT(users.first_name, ' ', users.last_name)",
'department_name' => 'departments.name',
])
->setSearchMapping([
'full_name' => "CONCAT(users.first_name, ' ', users.last_name)",
'email' => 'users.email',
'city' => 'users.city'
]);
BabaSultan23DynamicDatatable::render(
....
manuelSearch: true,
)
BabaSultan23DynamicDatatable::setManuelSearchCallback(function ($query, $searchValue) {
return $query->where(function($q) use ($searchValue) {
$q->where('name', 'like', "%{$searchValue}%")
->orWhere('email', 'like', "%{$searchValue}%");
});
});
BabaSultan23DynamicDatatable::setFormatResponse(function ($query, $totalRecords, $filteredRecords) {
return DataTables::of($query)
->with([
'recordsTotal' => $totalRecords,
'recordsFiltered' => $filteredRecords,
])
->addColumn('full_name', function ($data) {
return $data->first_name . " " . $data->last_name;
})
->rawColumns(['full_name'])
->make(true);
});
// Controller
public function index()
{
$columns = [
['data' => 'id', 'title' => 'ID'],
['data' => 'plus', 'title' => '', 'orderable' => 'false'],
['data' => 'full_name', 'title' => 'Ad Soyad'],
['data' => 'lesson_name', 'title' => 'Ders'],
['data' => 'email', 'title' => 'E-posta'],
['data' => 'city', 'title' => 'Şehir'],
['data' => 'actions', 'title' => 'İşlemler', 'orderable' => 'false']
];
$dataTable = BabaSultan23DynamicDatatable::render(
tableId: 'student-table',
dataTableName: 'studentDatatable',
columns: $columns,
fetchUrl: route('package.fetch'),
title: 'Öğrenci Listesi',
options: [
'pageLength' => 10,
// config içerisindeki dosyadan tüm tablolar için özelleştirilebilir ya da tablo özelinde buradan kullanım
],
filters: [
'html' => '
<div class="row mb-3">
<div class="col-md-4">
<label for="cityFilter" class="filter-label">Şehir Seçin:</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">Tarih:</label>
<input type="date" id="dateFilter" class="form-control">
</div>
</div>
',
'js' => [
'filterElements' => ['cityFilter', 'dateFilter'],
'filterData' => "
d.city = $('#cityFilter').val();
d.date = $('#dateFilter').val();
"
]
],
plusButton: true,
plusParentIdKey: 'parent_id',
manuelSearch: true,
language: 'tr'
);
return view('students.index', compact('dataTable'));
}
// Fetch Metodu
public function fetch(Request $request)
{
BabaSultan23DynamicDatatable::setOrderMapping([
'full_name' => "CONCAT(students.name, ' ', students.surname)",
'lesson_name' => 'lessons.name',
])
->setSearchMapping([
'full_name' => "CONCAT(students.name, ' ', students.surname)",
'lesson_name' => 'lessons.name',
'email' => 'students.email',
'city' => 'students.city'
])
->setActionButtons(function ($row) {
return '<button onclick="ogrenciGuncelle(' . $row->id . ')" class="btn btn-warning">Güncelle</button>
<button onclick="ogrenciSil(' . $row->id . ')" class="btn btn-danger">Sil</button>';
})
->setManuelSearchCallback(function ($query, $searchValue) {
return $query->where(function($q) use ($searchValue) {
$q->where('lessons.name', 'like', "%{$searchValue}%");
});
})
->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('full_name', function ($data) {
return $data->name . " " . $data->surname;
})
->addColumn('lesson_name', function ($data) {
return $data->lesson_name;
})
->addColumn('actions', function ($row) {
return BabaSultan23DynamicDatatable::getActionButtons($row);
})
->rawColumns(['plus', 'full_name', 'lesson_name', 'actions'])
->make(true);
});
$query = Student::query();
// Parent-Child ilişkisi için sorgu
$parentId = $request->parent_id ?? [];
if ($parentId != 'null' && $parentId) {
$query = $query->where('parent_id', $parentId);
} else {
$query = $query->whereNull('parent_id');
}
// İlişkili tabloları birleştirme
$query->leftJoin('lessons', 'students.lesson_id', '=', 'lessons.id')
->select('students.*', 'lessons.name as lesson_name');
// Filtre uygulama
if (isset($request->city) && $request->city !== '') {
$query->where('students.city', $request->city);
}
return BabaSultan23DynamicDatatable::processDataTableRequest($query, $request);
}
bash
php artisan vendor:publish --provider="BabaSultan23\DynamicDatatable\DynamicDatatableServiceProvider" --tag=config
php artisan vendor:publish --provider="BabaSultan23\DynamicDatatable\DynamicDatatableServiceProvider" --tag=crudAjax
//Dil paketlerine ekleme yapmak isterseniz çalıştırınız
php artisan vendor:publish --provider="BabaSultan23\DynamicDatatable\DynamicDatatableServiceProvider" --tag=lang_path
javascript
//Js eklendi
script src="{{ asset('babasultan23/js/babasultan23-crudAjax.js') }}
//Örnek Kullanım
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)
);
}