[السلام عليكم ورحمة الله وبركاته
كيف حالكم جميعا ؟ ان شاء الله انه يكون الجميع بخير
المهم نبدأ بدرسنا لليوم
عنوان الدرس:
الدرس هو عبارة عن شرح وتحليل لفكرة تعدد الصفحات، في النهاية راح يتكون عندنا كود لتعدد الصفحات يناسب جميع انواع القوالب. ويعمل بقوة ان شاء الله، لانه كثير نجد في القسم مواضيع بعنوان تعدد الصفحات في السمارتي والعديد من المواضيع المماثلة التي تعقد الموضوع مع العلم انه الموضوع بسيط جدا والخ.
فكرة الدرس:
فكرة تعدد الصفحات، هي قسم نتائج استعلام معين الى عدة اقسام، طبعا فائدته معروفة ، بدل ما نعمل استعلام بالف سجل ونعرضهم مرة واحدة، راح يثقل على السيرفر وراح يصعب قراءة الناتج، اذن نقوم بعمل تقسيم للنتائج بحيث نخفف على السيرفر ونخفف ايضا على القارئ ونسهل عليه
اذن الفكرة
انه لما نطلب صفحة معينة تعطينا فقط النتائج التي تنتمي لهذه الصفحة مثل المنتديات مثلا. والمفتاح الذي يحدد هو رقم الصفحة ، وايضا عدد النتائج التي سنعرضها في كل صفحة تحدد ايضا ما هي النتائج التي ستخرج لنا
شرح الفكرة:
في البداية نضع نص الاستعلام الذي نريد ان ننفذه ، مثلا
كود PHP:
$query="SELECT * FROM news ORDER BY id DESC";
طبعا من الملاحظ انه ما نفذنا الاستعلام فقط وضعناه دون تنفيذ
الان نريد ان نحدد عدد النتائج لكل صفحة
كما في الكود
كود PHP:
$rowsPerPage=10;
في حالتنا هذه وضعنا عدد النتائج هو 10 طبعا قابل للزيادة او النقصان حسب انت ماذا تحتاج
الخطوة التالية هي حساب عدد كل النتائج ومعرفة عدد الصفحات اللازمة لنا
عن طريق الكود التالي
كود PHP:
$num=mysql_num_rows(mysql_query($query));
$pagesNum=ceil($num/$rowsPerPage);
قسمنا عدد النتائج على عدد النتائج لكل صفحة ثم اخذنا قيمة اكبر عدد صحيح عن طريق دالة ceil
الدالة معروفة وظيفتها عند متخصصين الرياضيات ويسموها اكبر عدد صحيح ورمزها [number] ويوجد ايضا واحدة اخرى اسمها floor بتاخذ اصغر رقم صحيح لكن احنا هنا بيعنينا اكبر عدد صحيح فقط
الخطوة التالية
نريد عن طريق GET ان نأخذ رقم الصفحة من المستخدم
كود PHP:
$page=intval($_GET[page]);
طبعا دالة انتفال للحماية من ادخال اي رموز غير مرغوب فيها
الان في الخطوة التالية
اما المستخدم سيدخل رقم صحيح ومقبول ، او راح يدخل شي خاطئ
لذلك راح نحصر جميع الاحتمالات عن طريق جملة شرطية
كود PHP:
if($page==""||$page==0||$page==1||$page>$pagesNum||$page<0)
{
$page=1;
$startIndex=0;
$endIndex=$rowsPerPage;
}
else {
$startIndex=($page-1)*($rowsPerPage);
$endIndex=$rowsPerPage;
}
واضح من الكود انه في اذا ادخل المستخدم 1 او 0 او لم يدخل شي او حتى ادخل رقم سالب او حتى ادخل رقم اكبر من عدد الصفحات، سيحوله الى الصفحة الاولى
وسيكون البداية من الصفر وعدد العناصر هو الذي حددناه بالاعلى
اما في حال ادخل رقم صفحة مسموح فإنه سيقوم باحتساب النتائج المطلوبة كما هو موضح بنص else
فقط دقق في الكود لمدة 10 ثوان وستعرف بالضبط كيف يعمل الكود
الان نجري الاستعلام
كود PHP:
$result=mysql_query("$query LIMIT $startIndex,$endIndex");
ثم عن طريق جملة تكرارية نخرج النتائج ونخزنها في مصفوفة ، فيكون لدينا النتائج المطلوبة فقط في الصفحة التي ادخلنا رقمها
كود PHP:
while($rows=mysql_fetch_array($result))
{
$newsdata[]=$rows;
}
بعد استخرجنا المعلومات ووضعناها في مصفوفة ، لم يتبق علينا سوى طباعة الصفحات
انا استخدمت متغير واسميته $pagination لوضع ارقام الصفحات فيه كما هو موضح بالاسفل
كود PHP:
$pagination="";
for($i=1;$i<=$pagesNum;$i++)
{
if($page==$i)
{
$pagination.=" <span class=\"pagination1\">$i</span>";
}
else {
$pagination.=" <span class=\"pagination2\"><a href=\"news.php?page=".$i."\">".$i."</a></span>";
}
}
من خلال جملة الفور لوب for الموضحة نقوم بتكوين ارقام الصفحات
ومن الملاحظ ايضا اني اكسبتها كلاس css حتى تكون مرنة في تغيير مظهرها
الان في نظام قوالبك
فقط اكتب اسفل السجلات الجملة التالية في حال كان نظامك سمارتي
اما في حال كان نظامك غير السمارتي فالعملية هي عملية طباعة متغير عادي
وراح تكون حصلت على تعدد الصفحات المطلوب
انا وضعت لكم تنسيق css بامكانكم التعديل عليه بكل سهولة
وهو
كود:
.pagination1
{
font: 10pt tahoma;
border: 1px solid #1D6EBF;
width:25px;
background:#80BDFB;
}
.pagination2
{
font: 10pt tahoma;
border: 1px solid #1D6EBF;
width:25px;
background:#F2F2F2;
}
والناتج راح يكون كما في الصفحة التالية
امل ان يكون الدرس قد نال اعجابكم
وهذا هو الكود كامل
كود PHP:
$query="SELECT * FROM news ORDER BY id DESC";
$rowsPerPage=2;
$num=mysql_num_rows(mysql_query($query));
$pagesNum=ceil($num/$rowsPerPage);
$page=intval($_GET[page]);
if($page==""||$page==0||$page==1||$page>$pagesNum||$page<0)
{
$page=1;
$startIndex=0;
$endIndex=$rowsPerPage;
}
else {
$startIndex=($page-1)*($rowsPerPage);
$endIndex=$rowsPerPage;
}
$result=mysql_query("$query LIMIT $startIndex,$endIndex");
while($rows=mysql_fetch_array($result))
{
$newsdata[]=$rows;
}
$pagination="";
for($i=1;$i<=$pagesNum;$i++)
{
if($page==$i)
{
$pagination.=" <span class=\"pagination1\">$i</span>";
}
else {
$pagination.=" <span class=\"pagination2\"><a href=\"news.php?page=".$i."\">".$i."</a></span>";
}
}
والسلام عليكم ورحمة الله وبركاته ]
الدرس منقول من ترايدنت : http://traidnt.net/vb/showthread.php?t=1433862
وإن شاء الله يجي ذاك اليوم والي انزل لكم دروس من دروسي :funny: