السلام عليكم ورحمة الله تعالى وبركاته
اليوم سنتعرف على كيفية برمجة نظام تعدد صفحات بسيط جدا لكن لاباس به يفي بالغرض
في البداية يجب ان تحدد 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){ 


  [
IMG]http://cdn5.tribalfusion.com/media/37536.gif[/IMG]    
    
$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 .= '<span class="current">'.$i.'</span>'

    }else{ 

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

    }   



if(
$cPage $nbPage){ 

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

    }else{ 

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



############### End Pagination ############### 


الان كي تظهر الاستعلام فقط ستطبع المتغير pagination
ان كنت تستعمل smarty فضع التالي
كود PHP:
                            $smarty->assign('pagination',$pagination); 


ستطبع المتغير بشكل عادي كباقي المتغيرات في القالب كالتالي
كود PHP:
                            {$pagination


اما ان كنت تستعمل القالب السهل فالامر ابسط بكثير
فقط ضع التالي في القالب
كود PHP:
                            {pagination


الى هنا ننهي الدرس ان شاء الله يكون واضح
اي استفسار انا هنا
و السلام خير ختام