سلام دوستان
این کد لاراول هست
public function pagination(Request $req)
{
$query = Admin::query();
if ($s = $req->input('s')) {
$query->whereRaw("name LIKE '%" . $s . "%'")
->orWhereRaw("email LIKE '%" . $s . "%'");
}
if ($sort = $req->input('sort')) {
$query->orderBy('id', $sort);
}
$perPage = 9;
$page = $req->input('page', 1);
$total = $req->count();
$result = $req->offset(($page - 1) * $perPage)->Limit($perPage)->get();
return response()->json([
'data' => $result,
'total' => $total,
'page' => $page,
'last_page' => ceil($total / $perPage),
]);
}
اینم کد فرانتند
$.getJSON("http://localhost:8000/api/customers/pagination", function (data) {
var ul = '';
$.each(data, function (key, value) {
ul += '<li class="page-item"><a class="page-link" href="#"></a></li>';
});
$('#ul').append(ul);
});
متغیر هایی رو که از response json میگیرم باید کجای کد فرانتند بزارم که به درستی هم نمایش بده و هم درست کار کنه.
ممنون میشم راهنمایی کنید.
برای نمایش لیست کاربرها که باید یه حلقه بزنی
امابرای نمایش لینکهای صفحه بندی دیگه حلقه نمیخواد کافیه هر بار که لیست خونده میشه کلیدهای nextPageUrl و previousPageUrl رو با یه if چک کنی اگه مقداری داشتن در واقع باید دکمه بعدی یا قبلی متناسب با مقدارشون فعال یا غیر فعال شود .
اگر مقدارشون برابر با null بود یعنی دیگه صفحه ی بعدی یا قبلی وجود نداره و اون لینکه باید غیر فعال بشه.
کد بکندت خیلی جای تمیز نویسی داره بفرما میخوای چه کوئری ای بزنی تا یه روش مناسب بهت بگم و صفحه بندیش هم راحت باشه.
برای راحتی در صفحه بندی در api فقط میتونی از لینکهای صفحه قبل یا بعد در سمت فرانت استفاده کنی و همین طور تعداد کل رو نشون بدی.
من فقط میخوام قابلیت pagination رو از طریق api از بکند به فرانتند بدم
یعنی از laravel به laravel و jquery بدم @hosseinshirinegad98
این کدی هست که من دارم ازش استفاده میکنم
public function users()
{
$users = User::paginate(10);
return response([
'status' => 200,
'message' => 'List of users',
'users' => $users,
'meta' => [
'count' => $users->count(),
'nextPageUrl' => $users->nextPageUrl(),
'previousPageUrl' => $users->previousPageUrl(),
'perPage' => $users->perPage(),
'total' => $users->total(),
'lastItem' => $users->lastItem(),
]
]);
}
بعد شما اینو داخل فرانتند چجوری پیاده سازی کردید؟
یعنی با foreach یا روش دیگه ای؟
@hosseinshirinegad98
برای نمایش لیست کاربرها که باید یه حلقه بزنی
امابرای نمایش لینکهای صفحه بندی دیگه حلقه نمیخواد کافیه هر بار که لیست خونده میشه کلیدهای nextPageUrl و previousPageUrl رو با یه if چک کنی اگه مقداری داشتن در واقع باید دکمه بعدی یا قبلی متناسب با مقدارشون فعال یا غیر فعال شود .
اگر مقدارشون برابر با null بود یعنی دیگه صفحه ی بعدی یا قبلی وجود نداره و اون لینکه باید غیر فعال بشه.
درود مجدد اقای @hosseinshirinegad98
اگر بخوام لینک های قبل و بعد رو بزارم توی بلیدم باید توی متد getJSON باشه دیگه؟
و بعد هم باید اینطوری باشه؟ چه شکلی button رو بسازم؟
if (data.meta.nextPageUrl === null && data.meta.previousPageUrl === null)
{
} else {
}
اینم از بقیه کد که لیست admin هارو نشون میشده و کاملا درست کار میکنه. نیازی به اصلاح کردن نداره؟
$.getJSON("http://localhost:8000/api/admins", function(data) {
if (data.admins.data && data.admins.data.length > 0) {
var tbody = '';
$.each(data.admins.data, function(key, value) {
tbody += '<tr>';
tbody += '<td>' + value.id + '</td>';
tbody += '<td>' + value.name + '</td>';
tbody += '<td>' + value.email + '</td>';
tbody += '<td>' + value.created_at + '</td>';
tbody += '<td><a href="/admin-panel/admins/edit/' + value.id +
'"><button class="btn btn-info"><span class="symbol-input100"><i class="fa fa-edit" aria-hidden="true"></i></span></button></a> <button data-id="' +
value.id +
'" class="btn delete btn-danger"><span class="symbol-input100"><i class="fa fa-remove" aria-hidden="true"></i></span></button></td>';
tbody += '</tr>';
});
$('tbody').append(tbody);
} else {
Swal.fire({
title: 'توجه',
iconHtml: '!',
text: 'ادمینی وجود ندارد',
confirmButtonText: 'تایید',
showCancelButton: false,
showCloseButton: true
});
}
});
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟