درس برمجة نظام تعدد صفحات







السلام عليكم ورحمة الله تعالى وبركاته

 اليوم سنتعرف على كيفية برمجة نظام تعدد صفحات بسيط جدا لكن لاباس به يفي بالغرض في البداية يجب ان تحدد Get مثلا في الرابط نجد كالتالي

نتابع

رمز PHP:
http://localhost/cms/index.php?page=1 

page هذه التي يجب ان تحدد انا مثلا اخترت page انت اختر ماتريده اول شيئ سنقوم به هو جلب عدد القيم في الجدوول مثلا المواضيع او التدوينات او التعليقات او اي شيئ

رمز PHP:
$count mysql_query('SELECT COUNT(id) AS numb FROM articles ORDER BY id desc');

هذا مثال للاستعلام يوجد شيئ قد يكون غامضا للبعض وهي

رمز PHP:
 COUNT(id) AS numb 

في البداية عبر الامر Count جلبنا عدد القيم وامرناه ان يحسب عبر id كي يسهل الامر على السيرفر

رمز PHP:
COUNT(id

هنا اقرننا النتيجة في متغير باسم numb

رمز PHP:
 AS numb 

نحول النتائج الى مصفوفة

رمز PHP:
$array mysql_fetch_assoc($count); 

بعدها نخزن عدد النتائج في القاعدة في متغير

رمز PHP:
$number $array['numb']; 

طبعا numb هو الاسم الذي حددناه في الاستعلام لم نعد في حاجة الى الاستعلام لذلك سنحذف كل مخلفاته من اجل اراحة السيرفر

رمز PHP:
mysql_free_result($count); 

نحدد في متغير عدد النتائج التي نريدها في كل جدول

رمز PHP:
$PerPage 5

مثلا انا اخترت 5 يمكنك ان تختار ما تريد على حسب الحاجة الان نقوم بجلب عدد النتائج في الصفحة عبر عملية قسمة بسيطة

رمز PHP:
$nbPage ceil(abs($number/$PerPage)); 

حيث نقسم عدد النتائج في الجدول على عدد النتائج في الصفحة استعملت الدالة ceil لازالة الفاصلة من الرقم اما الدالة abs فهي للتاكد من ان العدد موجب نضع شرط طويل نوعا ما لكنني ساقوم بشرحه بالتفصيل

رمز PHP:
if(isset($_GET['page']) && $_GET['page'] > && $_GET['page'] <= $nbPage && preg_match('#^[0-9]+$#',$_GET['page'])){

    
$cPage $_GET['page'];

التحقق من وجود ال get الخاصة ب page

رمز PHP:
isset($_GET['page']) 

التحقق من انه اكبر من 0 لانه مستحيل ان يكون رقم الصفحة 0

رمز PHP:
$_GET['page'] > 

نتحقق من انه لا يساوي او اكبر من عدد النتائج في الصفحة

رمز PHP:
$_GET['page'] <= $nbPage 

نتحقق من انه رقمي فقط

رمز PHP:
&& preg_match('#^[0-9]+$#',$_GET['page']) 

ويمكنك استعمال الدالةا is_numeric فهي تفي بي الغرض ان تحققت كل الشروط عين قيمة المتغير هي قيمة get الخاصة ب page

رمز PHP:
$cPage $_GET['page']; 

ان لم تحقق الشروط اجعلها 1

رمز PHP:
else{

    
$cPage 1;


وهي الصفحة الاولى نضع استعلامنا من اجل العرض بطريقة عادية فقط سنضيف الخاصية limit

رمز PHP:
 LIMIT '.(($cPage-1) * $PerPage).',.$PerPage 

مثال للاستعلام

رمز PHP:
$Query mysql_query('SELECT * FROM articles ORDER BY id desc LIMIT '.(($cPage-1) * $PerPage).','.$PerPage); 

بعدها ستعرض النتائج بشكل عادي

رمز PHP:
while($Rows mysql_fetch_assoc($Query)){

بشكل طبيعي الان بقي فقط عرض تعدد الصفحات نقوم بتعيين متغيرين للسابق و التالي

رمز PHP:
$next $cPage 1;

$prev $cPage 1

باضافة قيمة 1 او نقصها من المتغير الذي عينناه في الشرط الطويل :Cool: اوكي ننشئ متغير نجعل قيمته فارغة كي لا تعرض اخطاء في النسخ القديمة من php

رمز PHP:

$pagination 
''

نتحقق من ان الصفحة الحالية اصغبر من عدد الصفحات

رمز PHP:
if($cPage $nbPage){

    
$pagination .= '<span><a href="index.php?page='.$next.'"> التالي </a></span>';


وان تحققت اضيف محتوى الى المتغير pagination وان لم يتحقق اضف محتوى لكن فقط span بدون رابط

رمز PHP:
else{

    
$pagination .= '<span class="disabled"> التالي </span>';


نضع تكرار لارقام الصفحات

رمز PHP:

for($i=1;$i<=$nbPage;$i++){

    


نتحقق ان كانت الصفحة الحالية تساوي قيمة المتغير i

رمز PHP:
if($i == $cPage){

        
$pagination .= '<span class="current">'.$i.'</span>';

    } 

وان تحققت اضيف قيمة للمتغير pagination لكن بدون رابط فقط span مع كلاس تحدد قيمه انت من ملفات style الخاصة بك وان لم يكن اطبع حتى الرابط

رمز PHP:
else{

        
$pagination .= '<a href="index.php?page='.$i.'">'.$i.'</a>';

نفس الامر الخاص ب التالي نضعه للسابق فقط من قلب الشرط بدل اصغر سنجعله اكبر

رمز PHP:
if($cPage $nbPage){

    
$pagination .= '<span><a href="index.php?page='.$prev.'"> السابق </a></span>';

    }else{

    
$pagination .= '<span class="disabled"> السابق </span>';

ليسصبح كود pagination

رمز PHP:
############### Start Pagination ###############

$next $cPage 1;

$prev $cPage 1;

$pagination '';

if(
$cPage $nbPage){

    
$pagination .= '<span><a href="index.php?page='.$next.'"> التالي </a></span>';

}else{

    
$pagination .= '<span class="disabled"> التالي </span>';

}

for(
$i=1;$i<=$nbPage;$i++){

  
if(
$i == $cPage){

الان كي تظهر الاستعلام فقط ستطبع المتغير pagination ان كنت تستعمل smarty فضع التالي

رمز PHP:
$smarty->assign('pagination',$pagination); 

ستطبع المتغير بشكل عادي كباقي المتغيرات في القالب كالتالي

رمز PHP:
{$pagination

اما ان كنت تستعمل القالب السهل فالامر ابسط بكثير فقط ضع التالي في القالب

رمز PHP:
{pagination
الى هنا ننهي الدرس ان شاء الله يكون واضح اي استفسار انا هنا و السلام خير ختام

http://www.traidnt.net/vb/showthread.php?t=1793849