Arabic (العربية/عربي) translation by eman (you can also view the original English article)
يمكنني ان اتذكر منذ سنوات عندما بدات في استخدام الترميز لاول مرة في PHP و MySQL كيف كنت متحمسا لاول مرة حين حصلت على معلومات من قاعدة بيانات لتظهر في متصفح ويب
بالنسبة للذين لديهم قاعدة بيانات و معرفة بسيطة بالبرمجة فان رؤية صفوف الجداول تظهر على الشاشة بناء على الشفرة التي كتبته , لذلك قمت بنسخ مثال من كتاب (lets not split hairs) ]فقد ساعدني كثيرا. قد لا أكون فهمت السر وراء اتقان العمل في ذلك الوقت ، لكن هذا النجاح الأول دفعني إلى انجاز مشاريع أكبر وأفضل
في حين أن مستواى وفرة قواعد البيانات لدي قد لا يكون كما كان في السابق
مند اول لقاء لي " مرحبا بالعالم" , لقد كنت مدمنا
على قوة جعل الأشياء بسيطة وسهلة الاستخدام.
كوني مطور ، هناك مشكلة أواجهها باستمرار وهي أخذ كمية كبيرة من المعلومات وجعلها سهلة الفهم إذا كانت قائمة عملاء شركة كبيرة أو كتالوج mp3 الشخصي ، فعلي الجلوس والتحديق في الصفوف و بين الصفوف وعلى صفوف البيانات مما يجعل انجاز المهمة محبطا
ومثبطا ما الذي يمكن أن يفعله المطور الجيد؟ ترقيم الصفحات
ترقيم الصفحات
ترقيم الصفحات هو في الأساس عملية الحصول على مجموعة من النتائج و تحقيق الانتشار
لجعلها اسهل للعرض

أدركت في وقت مبكر أنه ليس كافي ان يكون لدي 5000 صفحة من المعلومات لعرضها
يمكن تسبب المحاولة والقراء الصداع للشخص ، ولكن معظم المتصفحات سوف تستغرق
وصول للانترنت اكثر من 5 ثواني للعرض
للتغلب على هذه المشكلة اود أن أقوم برمز عبارات SQL المختلفة لسحب قطع البيانات ، وإذا كنت
في مزاج جيد قد ألقى في بضع الأزرار "التالية" و "السابقة".
بعد فترة ، اضطر إلى إسقاط هذا الرمز في كل مشروع مماثل واقوم بتخصيصه
ليتناسب مع النمط القديم ويصبح سريعا وكما هو معروف لكل مطور جيد ، فإن الكسل يولد الإبداع
او شي كهذا... لذا في أحد الأيام جلست وقررت أن أخرج ب
بفكرة مرنة وسهلة الاستخدام لفئة PHP التي من شأنها أن تنجز تلقائيا العمل
لي
كلمة سريعة عني و عن طبقات PHP انا لست خبيرا باستهداف الاشياء في الواقع ، بالكاد
استخدم الاشياء مثلما كنت في الماضي ولكن بعد قمت بقراءة بعض الأمثلة OOP والدروس ،
وبعض الأمثلة البسيطة علن التجربة والخطأ ، قررت أن ان اجرب ،وأنت تعرف ماذا؟
انه يعمل بشكل ممتاز مع الترقيم الكود المستخدم هنا مكتوب بلغة PHP 4 ,لكنه
يعمل مع PHP5
قاعدة البيانات
عليكم ان تحبوا MySQL ليس لسوء في انظمة البيانات الاخرى , ولكن
بالنسبة لي كل ما ارغبه هو MySQL ومن اهم الميزات المستقبلية ل MySQL انه يمنحك
قاعدة بيانات لاستخدامها كعينة
بالنسبة للأمثلة الخاصة بي ، سأستخدم قاعدة البيانات العالمية (~ zd zip) التي تحتوي على أكثر من
4000 سجل لتجرب بها، لكن مميزات نص PHP الذي سننشئه
انه يمكن استخدامه مع اي قاعدة بيانات الان اعتقد اننا يمكننا جميعا ان نتفق انه في حال قررنا
ليس لفرز نتائجنا حيث قد ينتهي بنا الأمر إلى
نتائج نتائج طويلة وغير عملية كالتالي

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

جميل اليس كذلك؟ بمجرد ان تقوم بإسقاط فئة ترقيم الصفحات في التعليمات البرمجية ،
يمكنك بسرعة وبسهولة تحويل مجموعة ضخمة من البيانات إلى صفحات سهلة النقل
فقط بضعة أسطر من الكود حقا
مرقم الصفحات
سيتكون هذا المثال من برنامجين نصيين ، فئة الفواصل الزمنية القابلة لإعادة الاستخدام وملف الفهرس الذي سيعرض عناصر الجدول وعناصر التحكم
مرقم الصفحات فئة php
سيكون لفئة مرقم الصفحات اسلوبين ومنشئ ، سنقوم ببنائها بشكل تدريجي لشرح كل خطوة كلما تقدمنا للامام
<?php class Paginator { private $_conn; private $_limit; private $_page; private $_query; private $_total; }
هذا التعريف يحدد فقط المتغير المطلوب للمرقم ، حيث أن هذا هو فئة مساعد ، وموجه ل عملية الترقيم فقط يعتمد على اتصال صحيح بخادم MySQL واستعلام محدد بالفعل سنقوم بإلحاق العامل المتغير الضروري لترقيم النتائج. سنبدا بالاسلوب الانشائي
<?php public function __construct( $conn, $query ) { $this->_conn = $conn; $this->_query = $query; $rs= $this->_conn->query( $this->_query ); $this->_total = $rs->num_rows; }
بسيط جدا , اليس كذلك؟ تقوم هذه الطريقة فقط بتعيين اتصال قاعدة بيانات الهدف والاستعلام الضروري ، بعد ذلك تقوم بحساب العدد الإجمالي للصفوف التي تم استردادها بواسطة هذا الاستعلام دون أي حدود أو تخطي للمتغيرات ، هذا المجموع ضروري لإنشاء روابط للمخطط
لاحظ أنه بالنسبة إلى البساطة ، فإننا لا نقوم بفحص الأخطاء أو صحة المتغيرات ، ولكن في التطبيق الواقعي ، ستكون هذه الفحوصات ضرورية .
استرجاع النتائج
لنقم الآن بإنشاء الطريقة التي تقوم بالفعل بترقيم البيانات وإسترجاع النتائج.
<?php public function getData( $limit = 10, $page = 1 ) { $this->_limit = $limit; $this->_page = $page; if ( $this->_limit == 'all' ) { $query = $this->_query; } else { $query = $this->_query . " LIMIT " . ( ( $this->_page - 1 ) * $this->_limit ) . ", $this->_limit"; } $rs = $this->_conn->query( $query ); while ( $row = $rs->fetch_assoc() ) { $results[] = $row; } $result = new stdClass(); $result->page = $this->_page; $result->limit = $this->_limit; $result->total = $this->_total; $result->data = $results; return $result; }
هيا نحلل هده الخطوة ، أولاً نقوم بتعيين معلمات الحد والصفحة ، والتي يتم تعيينها بشكل افتراضي على 10 و 1 على التوالي. نتحقق مما إذا كان المستخدم يتطلب عددًا معينًا من الصفوف أو جميعها ، استنادًا إلى هذا و لمعلمة الصفحة وقمنا بتعيين معلمة LIMIT للاستعلام ، فإن "- 1" من الصفحة تأخذ في الاعتبار حقيقة أننا نبدا الصفحات من 1 بدلاً من 0.
ثم نقوم بتقييم الاستعلام والحصول على النتائج بشكل بسيط ، وفي النهاية نقوم بإنشاء كائن نتائج جديد يحتوي على الحد ، والصفحة والمعلمات الإجمالية للاستعلام الذي تم تنفيذه بالإضافة إلى البيانات لكل من الصفوف المسترجعة.
عرض روابط ترقيم الصفحات
لنكتب الان الطريقة المستخدمة للحصول على روابط ترقيم الصفحات
<?php public function createLinks( $links, $list_class ) { if ( $this->_limit == 'all' ) { return ''; } $last = ceil( $this->_total / $this->_limit ); $start = ( ( $this->_page - $links ) > 0 ) ? $this->_page - $links : 1; $end = ( ( $this->_page + $links ) < $last ) ? $this->_page + $links : $last; $html = '<ul class="' . $list_class . '">'; $class = ( $this->_page == 1 ) ? "disabled" : ""; $html .= '<li class="' . $class . '"><a href="?limit=' . $this->_limit . '&page=' . ( $this->_page - 1 ) . '">«</a></li>'; if ( $start > 1 ) { $html .= '<li><a href="?limit=' . $this->_limit . '&page=1">1</a></li>'; $html .= '<li class="disabled"><span>...</span></li>'; } for ( $i = $start ; $i <= $end; $i++ ) { $class = ( $this->_page == $i ) ? "active" : ""; $html .= '<li class="' . $class . '"><a href="?limit=' . $this->_limit . '&page=' . $i . '">' . $i . '</a></li>'; } if ( $end < $last ) { $html .= '<li class="disabled"><span>...</span></li>'; $html .= '<li><a href="?limit=' . $this->_limit . '&page=' . $last . '">' . $last . '</a></li>'; } $class = ( $this->_page == $last ) ? "disabled" : ""; $html .= '<li class="' . $class . '"><a href="?limit=' . $this->_limit . '&page=' . ( $this->_page + 1 ) . '">»</a></li>'; $html .= '</ul>'; return $html; }
هذه الطريقة طويلة نوعًا ما ، حوالي 34 سطرًا من الكود ، لذلك دعونا الآن نوضح ما يجري في هذه الطريقة.
- أولاً ، نقوم بتقييم ما إذا كان المستخدم يتطلب عددًا معينًا من الارتباطات أم جميعها ، في الحالة الثانية لن يكون هناك حاجة إلى ترقيم الصفحات.
- بعد ذلك نقوم بحساب آخر صفحة بناءً على العدد الإجمالي للصفوف المتاحة و ايضا العناصر المطلوبة لكل صفحة.
- ثم نأخذ معلمة الارتباطات التي تمثل عدد الارتباطات التي يتم عرضها أسفل وفوق الصفحة الحالية ، وثم قم بحساب ارتباط البداية والنهاية .
- نحن الان ننشئ علامة البداية للقائمة وتأسيس صنفها بمعلمة فئة القائمة وإضافة رابط "الصفحة السابقة" ، ولاحظ أنه بالنسبة لهذا الرابط نتحقق مما إذا كانت الصفحة الحالية هي الأولى ، وإذا كان الأمر كذلك ، فسنقوم بتعيين خاصية تعطيل الارتباط.
- في هذه المرحلة ، نقوم بعرض رابطًا للصفحة الأولى ورمز علامة حذف في حالة أن رابط البدء ليس هو الأول.
- ثم ، نضيف الروابط أسفل وفوق الصفحة الحالية استنادًا إلى معلمات البدء والانتهاء المحسوبة مسبقًا ، وفي كل خطوة نقوم بتقييم الصفحة الحالية مرة أخرى ، ووفقا لذلك يتم عرض صفحة الارتباط وتعيين الفئة النشطة .
- بعد ذلك ، نقوم بعرض رمزًا آخر لعلامة القطع ورابط الصفحة الأخيرة في حال لم يكن الرابط هو الأخير.
- وأخيرًا ، نقوم بعرض رابط "الصفحة التالية" ونضبط حالة التعطيل عندما يشاهد المستخدم الصفحة الأخيرة ، ويغلق القائمة ,ويعيد سلسلة HTML التي تم إنشاؤها.
هذا كل ما في الأمر ، بالطبع يمكننا أن نضيف عوامل الضبط وgetters عن اتصال قاعدة البيانات ، والحد ، والصفحة ، والاستعلام ، والمعلمات الإجمالية ولكن للحفاظ على البساطة سوف نحتفظ بها بهذه الطريقة.
مؤشر.php
الآن سنقوم بإنشاء الملف المسؤول عن استخدام فئة Paginator وعرض البيانات ، لذا دعني أريك أولاً HTML .
<!DOCTYPE html> <head> <title>PHP Pagination</title> <link rel="stylesheet" href="css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="col-md-10 col-md-offset-1"> <h1>PHP Pagination</h1> <table class="table table-striped table-condensed table-bordered table-rounded"> <thead> <tr> <th>City</th> <th width="20%">Country</th> <th width="20%">Continent</th> <th width="25%">Region</th> </tr> </thead> <tbody></tbody> </table> </div> </div> </body> </html>
بسيط جداً ، هذا الملف فقط يعرض جدولاً سنقوم بتعبئته بالمعلومات المسترجعة من قاعدة البيانات ، ولاحظ أنه في هذا المثال ، أستخدم روتين التمهيد لتخطيط الصفحة الأساسية.
استخدام مرقم الصفحات
<?php for( $i = 0; $i < count( $results->data ); $i++ ) : ?> <tr> <td><?php echo $results->data[$i]['Name']; ?></td> <td><?php echo $results->data[$i]['Country']; ?></td> <td><?php echo $results->data[$i]['Continent']; ?></td> <td><?php echo $results->data[$i]['Region']; ?></td> </tr> <?php endfor; ?>
الآن للاستفادة من فئة Paginator الخاصة بنا ، أضف شفرة php التالية في أعلى المستند.
<?php require_once 'Paginator.class.php'; $conn = new mysqli( '127.0.0.1', 'root', 'root', 'world' ); $limit = ( isset( $_GET['limit'] ) ) ? $_GET['limit'] : 25; $page = ( isset( $_GET['page'] ) ) ? $_GET['page'] : 1; $links = ( isset( $_GET['links'] ) ) ? $_GET['links'] : 7; $query = "SELECT City.Name, City.CountryCode, Country.Code, Country.Name AS Country, Country.Continent, Country.Region FROM City, Country WHERE City.CountryCode = Country.Code"; $Paginator = new Paginator( $conn, $query ); $results = $Paginator->getData( $page, $limit ); ?>
هذا البرنامج النصي بسيط جداً ، هو المطلوب فقط أو فئة مرقم الصفحات، لاحظ أن هذا الرمز يفترض أن هذا الملف موجود في نفس الدليل كملف index.php ، إذا لم تكن هذه هي الحالة يجب عليك تحديث المسار وفقاً لذلك.
نحن نقوم بإنشاء الاتصال بقاعدة بياناتنا باستخدام مكتبة MySQLi ، واسترجاع معلمات ترقيم الصفحات من GET وتعيين الاستعلام ، حيث أن هذه ليست مقالة على MySQL أو ot لذا لن أدخل بتفاصيل حول الاتصال أو الاستعلام. المستخدم هنا.
واخيرا نقوم بانشاء مرقم الصفحات واسترجاع النتائج للصفحة الحالية
عرض النتائج
الآن لعرض النتائج التي تم الحصول عليها قم باضافة التعليمة البرمجية التالية إلى نص الجدول.
<?php for( $i = 0; $i < count( $results->data ); $i++ ) : ?> <tr> <td><?php echo $results->data[$i]['Name']; ?></td> <td><?php echo $results->data[$i]['Country']; ?></td> <td><?php echo $results->data[$i]['Continent']; ?></td> <td><?php echo $results->data[$i]['Region']; ?></td> </tr> <?php endfor; ?>
هنا ببساطة نحن نكرر من خلال سمة بيانات النتائج التي تحتوي على سجلات المدن وإنشاء صف جدول لكل واحد منهم.
روابط ترقيم الصفحات
الآن لعرض روابط ترقيم الصفحات (paginator لنقم بإضافة التعليمة البرمجية التالية أدنى الجدول
<?php echo $Paginator->createLinks( $links, 'pagination pagination-sm' ); ?>
للحصول على Paginator createLinks نمرر معلمات الارتباطات التي تم الحصول عليها وفئة css لارتباطات ترقيم الصفحات المستخدمة من bootstrap هنا نتائج الصفحة التي تم انشاؤها

الخاتمة
من المفترض أن يوفر لك هذا كل ما تحتاج إلى معرفته من أجل استخدام تطبيق ترقيم الصفحات في تطبيقك.
لا تتردد في ترك أسئلة أو تعليقات أو تقييمات عامة, أدناه!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weeklyEnvato Tuts+ tutorials are translated into other languages by our community members—you can be involved too!
Translate this post