محمدرضا فلکی
3 سال پیش توسط محمدرضا فلکی مطرح شد
11 پاسخ

چجوری اطلاعاتی رو که از pagination میگیرم به فرانتند تبدیل کنم

سلام دوستان
این کد لاراول هست

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 میگیرم باید کجای کد فرانتند بزارم که به درستی هم نمایش بده و هم درست کار کنه.

ممنون میشم راهنمایی کنید.


ثبت پرسش جدید
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

برای نمایش لیست کاربرها که باید یه حلقه بزنی
امابرای نمایش لینکهای صفحه بندی دیگه حلقه نمیخواد کافیه هر بار که لیست خونده میشه کلیدهای nextPageUrl و previousPageUrl رو با یه if چک کنی اگه مقداری داشتن در واقع باید دکمه بعدی یا قبلی متناسب با مقدارشون فعال یا غیر فعال شود .
اگر مقدارشون برابر با null بود یعنی دیگه صفحه ی بعدی یا قبلی وجود نداره و اون لینکه باید غیر فعال بشه.


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

کد بکندت خیلی جای تمیز نویسی داره بفرما میخوای چه کوئری ای بزنی تا یه روش مناسب بهت بگم و صفحه بندیش هم راحت باشه.
برای راحتی در صفحه بندی در api فقط میتونی از لینکهای صفحه قبل یا بعد در سمت فرانت استفاده کنی و همین طور تعداد کل رو نشون بدی.


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 3 سال پیش مطرح شد
0

من فقط میخوام قابلیت pagination رو از طریق api از بکند به فرانتند بدم
یعنی از laravel به laravel و jquery بدم @hosseinshirinegad98


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

این کدی هست که من دارم ازش استفاده میکنم

   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(),
            ]
        ]);
    }

حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

خب مشکلت حل شد سوالی نداری؟


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 3 سال پیش مطرح شد
0

بعد شما اینو داخل فرانتند چجوری پیاده سازی کردید؟
یعنی با foreach یا روش دیگه ای؟
@hosseinshirinegad98


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

برای نمایش لیست کاربرها که باید یه حلقه بزنی
امابرای نمایش لینکهای صفحه بندی دیگه حلقه نمیخواد کافیه هر بار که لیست خونده میشه کلیدهای nextPageUrl و previousPageUrl رو با یه if چک کنی اگه مقداری داشتن در واقع باید دکمه بعدی یا قبلی متناسب با مقدارشون فعال یا غیر فعال شود .
اگر مقدارشون برابر با null بود یعنی دیگه صفحه ی بعدی یا قبلی وجود نداره و اون لینکه باید غیر فعال بشه.


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 3 سال پیش مطرح شد
0

خیلی ممنون آقای @hosseinshirinegad98


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
0

خواهش میکنم اگه سوالی داشتی بپرس.


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 3 سال پیش مطرح شد
1

خیلی ممنونم @hosseinshirinegad98
اگر درباره این کد سوال داشتم حتما میپرسم 🙏


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

و نکته آخر ظاهرفرانتش به این شکل میتونه باشه
 صفحه بندی


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 3 سال پیش آپدیت شد
0

درود مجدد اقای @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
        });
    }
});

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام