جدول المحتويات
نحاول دائما كمبرمجين تقديم أفضل أنطباع وأريحية للعملاء في التعامل مع التطبيق، في هذه المقالة القصيره سيتم التطرق لكيفية تحديث حقل status بإستخدام مكتبة Switchery ، وإظهار رسالة للعميل تفيد أنه تم التحديث بإستخدام مكتبة Toastr.
فما نحاول الحصول علية كما في الصورة

public function index()
{
$authors=Author::select('id','fname','email','status','created_at')->get();
return view('author',compact('authors'));
}@foreach($authors as $author)
<tr>
<th scope="row">{{ $author->id }}</th>
<td>{{ $author->fname }}</td>
<td>{{ $author->email }}</td>
<td>{{ $author->status }}</td>
<td>{{ $author->created_at->diffForHumans() }}</td>
</tr>
@endforeachبالتالي سوف نحصل على هذه النتيجة

كما نرى بالصوره أعلاه أن قيمة status إما 2 أو 1، وعليها سوف يتم تطبيق الشكل الخاص بالمكتبة
تضمين ملف css
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/switchery/0.8.2/switchery.min.css">
تضمين مكتبة jquery
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/switchery/0.8.2/switchery.min.js"></script>
إعدادات المكتبة
<script>
let elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch'));
elems.forEach(function(html) {
let switchery = new Switchery(html, { size: 'small' });
});
</script>الأن يمكننا تطبيق المكتبة على حقل status
<td><input type="checkbox" data-id="{{ $author->id }}" name="status" class="js-switch" {{ $author->status == 1 ? 'checked' : '' }}></td>الأن سوف نحصل على هذا الشكل

للقيام بذلك سوف يتم إستخدام مكتبة ajax لإرسال الحالة مع author_id، والتي نحصل عليها من data-id attribute .
$(document).ready(function(){
$('.js-switch').change(function () {
let status = $(this).prop('checked') === true ? 1 : 2;
let authorId = $(this).data('id');
$.ajax({
type: "GET",
dataType: "json",
url: '{{ route('author.update.status') }}',
data: {'status': status, 'author_id': authorId },
success: function (data) {
console.log(data.message);
}
});
});
});في كود ajax فإننا نستهدف أي عنصر html يأخذ كلاس js-switch ، وفي حالة تغيير الحالة change فإننا نحصل على الحالة من خلال prop (2,1)، وفي المتغير authorId قمنا بالحصول على id المؤلف.
Route::get('/status/update', [AuthorController::class, 'updateStatus'])->name('author.update.status');
public function updateStatus(Request $request)
{
$author = Author::findOrFail($request->author_id);
$author->status = $request->status;
$author->save();
return response()->json(['message' => 'User status updated successfully.']);
}الأن يجب أن يعمل الكود بشكل سليم ويمكننا تغيير الحالة بنجاح.
سنستخدم المكتبة حتى يظهر إشعار للمستخدم أنه تم تعديل الحالة بنجاح
إضافة مكتبة css
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
إضافة مكتبة js
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
ولتطبيق مكتبة toaster بداخل الدالة success في طلب ajax يتم إضافة الكود الخاص بالمكتبة
success: function (data) {
toastr.options.closeButton = true;
toastr.options.closeMethod = 'fadeOut';
toastr.options.closeDuration = 100;
toastr.success(data.message);
}كود عرض الصفحة بالكامل
<html>
<head>
<title></title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/switchery/0.8.2/switchery.min.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.css">
</head>
<body>
<div class="container">
<div class="card">
<h5 class="card-header">Authors</h5>
<div class="card-body">
<table class="table table-bordered table-striped">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Email</th>
<th scope="col">Status</th>
<th scope="col">Created_at</th>
</tr>
</thead>
<tbody>
@foreach($authors as $author)
<tr>
<th scope="row">{{ $author->id }}</th>
<td>{{ $author->fname }}</td>
<td>{{ $author->email }}</td>
<td><input type="checkbox" data-id="{{ $author->id }}" name="status" class="js-switch" {{ $author->status == 1 ? 'checked' : '' }}></td>
<td>{{ $author->created_at->diffForHumans() }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/switchery/0.8.2/switchery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.min.js"></script>
<script>
let elems = Array.prototype.slice.call(document.querySelectorAll('.js-switch'));
elems.forEach(function(html) {
let switchery = new Switchery(html, { size: 'small' });
});
$(document).ready(function(){
$('.js-switch').change(function () {
let status = $(this).prop('checked') === true ? 1 : 2;
let authorId = $(this).data('id');
$.ajax({
type: "GET",
dataType: "json",
url: '{{ route('author.update.status') }}',
data: {'status': status, 'author_id': authorId },
success: function (data) {
toastr.options.closeButton = true;
toastr.options.closeMethod = 'fadeOut';
toastr.options.closeDuration = 100;
toastr.success(data.message);
}
});
});
});
</script>
</body>
</html>ممتاز بارك الله فيك استمر من فضلك
جميل جدا عاش نضال الشعب الفلسطيني
زائر
عااشت ايدك درس راقي مثلك ياراقي