السلام عليكم ورحمة الله وبركاته
اتمنى ان اكون عند ثقتك التي وضعتها في
بخصوص درس تعدد الصفحات
المثال بسيط جدا
فلنفرض انه لدينا قسم للدروس , ونريد ان نعرض عشرة دروس في كل صفحة
جدول الدروس هو lessons ويتكون مما يلي :
id رقم الدرس
username اسم كاتب الدرس
title وهو عنوان الدرس
lesson الدرس نفسه
date تاريخ اضافة الدرس
الان كما هو معروف لكي نظهر قائمة بالدروس الموجودة , وثم عند الضغط على اسم الدرس سيتم عرض الدرس لك
لعمل هذه القائمة , سنقوم بهذا الاستعلام :
كود PHP:
SELECT * FROM lessons
ولكن لو اردنا عرضها حسب التاريخ تنازليا حيث يتم عرض الدرس الاحدث أولا , سيكون الاستعلام كما يلي :
كود PHP:
SELECT * FROM lessons ORDER BY date DESC
الى الان انتهى الاستعلام في الوضع الطبيعي , وبهذا سيتم احضار بيانات جميع الدروس وعرضها في صفحة واحدة
ماذا لو اردنا فقط احضار آخر عشرة دروس؟
سيكون الاستعلام كما يلي
كود PHP:
SELECT * FROM lessons ORDER BY date DESC LIMIT 10
حيث ان LIMIT سيجعلني احدد عدد النتائج التي نريد احضارها ( وفي هذا المثال عشرة فقط )
الان نريد ان نحضر في الصفحة الاولى اخر عشرة دروس , وفي الصفحة التي تليها العشرة التي تليها وهكذا
لاحضار العشرة التالية ( يعني العشرة دروس التي تلي العشرة الاولى )
فسيكون استعلامنا كما يلي :
كود PHP:
SELECT * FROM lessons ORDER BY date DESC LIMIT 10,10
حيث ان LINIT 10,10 تعني حرفيا ( من بعد العشرة سجلات احضرلي عشرة نتائج )
تطبيقا لما سبق , فلو اردنا ان نحضر العشرة التي تليها ( يعني العشرة الثالثة , أي العشرة التي بعد العشرين الاولى ) , فسيكون الاستعلام
كود PHP:
SELECT * FROM lessons ORDER BY date DESC LIMIT 20,10
الآن اعتقد ان الصورة اتضحت
الان كيف نقوم بتحديد اي عشرة سيتم تحديدها في هذه الصفحة والصفحة التالية والسابقة , وهكذا آليا؟؟؟
هذا هو ملخص الدرس
بعد او قبل ان نجري استعلامنا هذا , سنجري استعلاما , مفاده اننا نريد ان نعرف كم سجلا موجودا لدينا في القاعدة ( ينطبق علسه نفس مواصفات الاستعلام الذي سنجريه , فلو كان هناك شرط WHERE يجب ان نطبق نفس الشرط في استعلام معرفة مجموع السجلات )
استعلام معرفة مجموع السجلات هو كالتالي (بدون LIMIT )
كود PHP:
SELECT id FROM lessons ORDER BY date
كما هو معروف ان الدالة mysql_num_rows ستعطينا عدد السجلات الموجودة في الاستعلام , وسنخزن قيمتها في متغير سنسمية check_end
كما يلي :
كود PHP:
$check_end=mysql_num_rows($query1);
الان نبدأ في عمل تعدد الصفحات
يأتي دور عمل تعدد الصفحات
** اولا نضع عداد للصفحات ونعين له القيمة 1 مبدأيا
$i=1;
** عدد السجلات التي سنعرضها في كل صفحة نعين قيمتها للمتغير $perpage
$perpage=2;
** الان , سنستخدم متغير للرقم الذي سيتم اعطاء قيمتة للمتغير count وسميناه $next واعطينا مبدأيا القيمة صفر
$next=0 ;
**الان نبدأ بجملة شرطية , مفادها انه طالما المتغير $next اقل من اجمالي السجلات $check_end سيتم تنفيذ الاوامر :
while($next<=$check_end){
** الان سنضع شرطا اخر داخل الشرط السابق , وظيفتها عدم وضع رابط على رقم الصفحة التي يتصفحها الزائر :
if ($count==$next){echo" $i ";}
** بخلاف ذلك الشرط , سيتم وضع رابط على رقم الصفحة , متضمنا قيمة المتغير count والتي هي المتغير next
else{echo" <a href='page.php?count=$next'>$i</a>";}
$next=$next+$perpage;$i++; }
اولا كتبنا انه لو كان المتغير $next يساوي المتغير $count فسيطبع لنا رقم
الصفحة $i غير نشطة
( يعني لو كان المتغير يساوي الصفحة التي نستعرضها فلن نضع
عليها رابطا لاننا نستعرضها فعلا )
اذا لم يتحقق هذا الشرط فانه سينفذ مايلي وهو
وضع رابط على رقم الصفحة يعطي للمتصفح قيمة المتغير count القيمة $next
بعد ذلك
, سنزيد قيمة المتغير $next بقيمة مقدارها $perpage لكي يتم اضافتها لرابط
رقم الصفحة التالية
الان نزيد رقم الصفحة $i بمقدار واحد كما يلي
$i++;