Abdelrahman Mostafa10 نشر 1 ديسمبر 2023 أرسل تقرير نشر 1 ديسمبر 2023 تفقدت كود خاص بمشروع Next.js لكن لم أفهم الجزء الخاص بالـ Pagination وهو التالي: schema.statics.paginate = async function ({ limit = 10, page = 1, sort = -1, where = {} }) { const skip = limit * (page - 1) const items = await this.find({ ...where, parent: null }) .limit(limit) .skip(skip) .sort({ createdAt: sort }) .populate('user', 'name') .populate('tags', 'name slug') .exec() const pages = Math.ceil(await this.count({ ...where, parent: null }).exec() / limit) return { items, pages } } أريد توضيح بشكل مفصل ومنطقي وليس شرح للأكواد فقط، ما الذي يحدث هنا، وهل هناك طريقة أسهل أو طريقة أفضل؟ بمعنى توضيح لكي أتمكن من إضافة ميزة الـ Pagination بعد ذلك بمفردي، وشكرًا لكم. اقتباس
0 Ahmed Elmrsawy نشر 1 ديسمبر 2023 أرسل تقرير نشر 1 ديسمبر 2023 schema.statics.paginate = async function ({ limit = 10, page = 1, sort = -1, where = {} }) { // حساب عدد العناصر التي يجب تخطيها استنادًا إلى الصفحة الحالية والحد (أقصد عدد) const skip = limit * (page - 1); // يتم استعمال الدالة التالية لاسترجاع العناصر من قاعدة البيانات // //حيث where تحتوي على الشروط مثل السعر const items = await this.find({ ...where, parent: null }) .limit(limit) // حدد عدد الوثائق المُرجعة في كل صفحة .skip(skip) // تخطي الوثائق استنادًا إلى القيمة المحسوبة للتخطي .sort({ createdAt: sort }) // فرز الوثائق استنادًا إلى حقل 'createdAt' .populate('user', 'name') // ملء الحقل 'user' بخاصية 'name' .populate('tags', 'name slug') // ملء الحقل 'tags' بخصائص 'name' و 'slug' .exec(); // تنفيذ الاستعلام // حساب العدد الإجمالي للصفحات استنادًا إلى إجمالي عدد الوثائق const pages = Math.ceil(await this.count({ ...where, parent: null }).exec() / limit); // إرجاع كائن يحتوي على الوثائق المُرجعة للصفحة الحالية والعدد الإجمالي للصفحات return { items, // الوثائق المُرجعة للصفحة الحالية pages // العدد الإجمالي للصفحات }; }; حتى تقوم بعملية الpaginate تحتاج الى معرفة عم عدد العناصر التي سوف تتخطاها و كم عدد العنصر في كل صفحة عدد العناصر التي سوف تتخطاها هو الskip و هو معرف داخل الfunction و يتم حسابة باستخدام الpage و الlimit كما هو موضح عدد العناصر في الصفحة الواحدة هو الlimit نلاحظ أيضا استعمال function بطريقة الfunction definition حتا تعمل كلمة this بدورها و تكون عائدة على الموديل نفسة و هو في حالتنا schema.statics _ مثلا لنفترض وجود 10 عناصر في كل صفحة اذا في الصفحة الأولى نريد تفويد عدد 0 منم العناصر و احضار 10 => skip=0 , limit =10 الصفحة الثانية نريد تفويت 10 و احضار 10 => skip=10 , limit=10 و هكذا اقتباس
0 محمد سعد شحرور نشر 3 ديسمبر 2023 أرسل تقرير نشر 3 ديسمبر 2023 الكود الخاص بك يقوم بتعريف تابع paginate في ال schema الخاصة ب mongoose. تقوم هذه الدالة بجلب قائمة مرقمة من الملفات documents الموجودة داخل ال collection الخاص بك في قاعدة البيانات mongo db، وذلك بناء على ال parameters. ال parameters هي: limit: عدد العناصر التي سيتم جلبا في الصفحة (ال default هو 10) page: رقم الصفحة التي سيتم جلبها، (ال default هو 1) sort: الترتيب، حيث 1 هي للتصاعدي، و -1 هي للتنازلي (ال default هو -1) where: الشرط الذي سيطبق عند جلب البيانات. بناء على هذه المتغيرات، يقوم التابع باعادة العناصر التي تم جلبها من قاعدة البيانات بعد ترقيمها، والعدد الاجمالي للصفحات. اقتباس
السؤال
Abdelrahman Mostafa10
تفقدت كود خاص بمشروع Next.js لكن لم أفهم الجزء الخاص بالـ Pagination وهو التالي:
أريد توضيح بشكل مفصل ومنطقي وليس شرح للأكواد فقط، ما الذي يحدث هنا، وهل هناك طريقة أسهل أو طريقة أفضل؟
بمعنى توضيح لكي أتمكن من إضافة ميزة الـ Pagination بعد ذلك بمفردي، وشكرًا لكم.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.