بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته ، أما بعد ؛
إخوتي الأعزاء .. لقد قمت بشرح نظام تعدد الصفحات في عملية استخراج البيانات من قاعدة البيانات .. [ MySQL ] ..
جاءني أحد الردود من الأخ محمد ( 2rabia.com ) كي أقوم بوضع درس آخر عن كيفية عمل نظام تعدد صفحات لعرض مجموعة ملفات موجودة داخل المجلد الحالي ..
طلبت من الأخ محمد مساعدتي في كتابة الدرس حتى نتناقش فيه بشكل جيد وحتى ننهيه بأسرع وقت .. ولا داعي للمزيد من الشرح حول هذا الموضوع
..
وبالفعل انتهينا منه والحمد لله 
تطرقت في الدرس الماضي إلى شرح هذا النظام بشكل نظري .. يمكنك مراجعة الدرس السابق على الرابط التالي ان لم تكن قرأته من قبل ..
http://www.swalif.net/softs/showthread.php?t=169812
الآن .. بعد أن تعرفت إلى هذا النظام بشكل نظري وبعد ان قمنا بتطبيقه عملياً بأحد الأشكال يمكننا الدخول مباشرة في هذا الدرس بلا مقدمات .. 
نبدأ بشرح الكود البرمجي الذي سنحتاجه في درسنا هذا بسم الله .. 
قم بتحديد عنوان المجلد في السيرفر الذي تستخدمه والذي تريد عرض ملفاته .. وذلك بتخزين المجلد [ المسار ] كمتغير:
كود PHP:
$dir = "./photos";
الآن نحدد عدد الملفات التي سنعرضها في الصفحة الواحدة :
الآن اكواد تصحيح رقم الصفحة وتعديله وجعله أكثر أماناً [ لشرح أكبر راجع الدرس السابق في شرح نفس الاكواد ] :
كود PHP:
$page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]);
$page = ($page == 0 ? 1 : $page);
ومن ثم تحديد نقطة بداية عرض الملفات [ رقم اول ملف ] :
كود PHP:
$startpoint = ($page * $perpage) - $perpage;
لكن هنا الوضع مختلف .. في الدرس السابق كنا نحدد عدد النتائج التالية التي سنعرضها .. اما هنا فسنحدد رقم اخر ملف يتم عرضه كما حددنا اول رقم .. وذلك بإضافة عدد الملفات في كل صفحة إلى رقم اول ملف .. بذلك نحصل على قيمة ( اخر ملف + 1 ) .. أي ان رقم اخر ملف يتم عرضه في الصفحة يساوي ( نقطة النهاية - 1 ) .. 
كود PHP:
$endpoint = $startpoint + $perpage;
الان نريد فتح اتصال بالمجلد الذي قمنا بتحديده في متغير $dir .. بكل بساطة سنستخدم دالة opendir لفتح مقبض اتصال بالمجلد :
كود PHP:
if ($dh = opendir("$dir")) {
مع وجود شرط في الكود السابق اذا تم الفتح بنجاح يتابع عملية جلب الملفات .. وإن فشلت ، يطبع رسالة خطأ في النهاية .. 
الآن نقوم بإنشاء مصفوفة فارغة وهي المصفوفة التي سيتم تخزين اسماء الملفات داخلها :
كود PHP:
$files = array();
الآن سوف نقرأ الملفات التي يحتوي عليها المجلد تدريجياً بواسطة دالة readdir وبواسطة حلقة تكرار while بسيطة هكذا :
كود PHP:
while (($file = readdir($dh)) !== false) {
هذه الحلقة التي قمنا بفتحها هنا تقوم بإعطاء المتغير $file قيمة باسم الملف التالي [ طبعأً الملف الأول ثم الثاني وهكذا في كل دورة loop ] .. وذلك عن طريق تمرير مقبض الاتصال بالمجلد إلى دالة readdir ومن ثم التأكد من أن قيمة العملية أو نوعها [ عن طريق !== ] لا يساوي false أي نتأكد من أن العملية ناجحة ثم نقوم بمتابعة العملية داخل الحلقة ..
كود PHP:
if ($file == "." or $file == ".." or $file == "Thumbs.db") {
continue;
}
خلال هذا الكود .. قمنا بالتأكد خلال جملة شرطية أن الملف الحالي الذي نريد طباعته أ, إدخاله ضمن مصفوفة الملفات $files ليس عبارة عن ملف المصغرات Thumbs.db .. أو ملف باسم " . " أو " .. " .. إذا كان اسم الملف يطابق أحد هذه الأسماء الثلاثة فإنه يتم تجاهل هذه الدورة loop والذهاب إلى الدورة التالية .. ومن ثم نغلق جملة الشرط if .. 
إذا لم يكن الملف أحد الأسماء الثلاثة السابقة فإنه لن يتم تجاوز هذه الدورة loop .. بهذا سيتم تنفيذ الكود التالي داخل الحلقة .. والكود التالي هو الذي سيقوم اضافة الملف إلى مصفوفة الملفات التي سيتم عرضها :
كود PHP:
$files[] = $file;
الآن سوف نغلق كود حلقة while :
الان نقوم بحساب عدد الملفات التي تم جمعها ضمن مصفوفة الملفات التي سيتم عرضها ضمن البرنامج من خلال دالة count التي تقوم بحساب عدد عناصر المصفوفة التي يتم تمريرها خلالها :
كود PHP:
$files_num = count($files);
الآن سوف نضع عنوان في الوسط يبين عدد الملفات المعروضة خلال البرنامج :
كود PHP:
echo "<center>عدد الملفات = ".$files_num."<br><hr width=30% color=#0080FF>";
في عملية جلب الملفات التي نريدها ضمن حدود قيمة متغير $startpoint و $endpoint .. نحتاج إلى عداد حتى نعرف رقم الملف الحالي .. لذلك نقوم بجعل القيمة الافتراضية للعداد تساوي قيمة رقم اول ملف نريد عرضه حتى نبدأ منه ولا نبدأ جولتنا من الصفر :
كود PHP:
$counter = $startpoint;
الآن نقوم بإنشاء جدول لعرض الملفات ، وفيه ننشئ أول سطر بوسم TR في الـ html :
كود PHP:
echo "<table><tr>";
الآن نريد التأكد من أن قيمة العداد التي أنشأناه في المتغير $counter أصغر من العدد الإجمالي للملفات الموجودة في المجلد .. بالإضافة إلى التأكد من أن قيمة العداد أيضاً تساوي أو أكبر من نقطة البداية $startpoint .. وأنها أصغر من نقطة النهاية أيضاً$endpoint .. وتلك الشروط كلها ضمن حلقة تكرار while ... كما يلي :
كود PHP:
while($counter < $files_num && $counter >= $startpoint && $counter < $endpoint){
الآن نقوم بطباعة الملف المطلوب محاطاً بوسم A لجعله كرابط يؤدي إلى ذلك الملف ...
كود PHP:
echo "<td><a href='$dir/$files[$counter]'>
<img src='$dir/$files[$counter]' border='0' width='150' height='150'>
</td>";
الآن نقوم بزيادة عداد $counter بمقدار 1 :
الآن نقوم بإغلاق جملة حلقة التكرار while :
واخيراً كود عرض ارقام الصفحات ووصلاتها :
كود PHP:
$pagesnum = @ceil($files_num / $perpage);
for ($i=1; $i<=$pagesnum; $i++) {
if ($i != $page) {
$z = "<a href='". $_SERVER['PHP_SELF'] ."?page=$i'>$i</a>";
} else {
$z = "<u>$i</u>";
}
echo " --=-=> $z ";
}
ومن ثم اذا لم يتم فتح المجلد بنجاح [ كما ذكرت في بداية الدرس ] سيتم اظهار رسالة خطأ كالتالي :
كود PHP:
} else {
echo " This Dir Is Wrong ";
}
درس بسيط وسهل باذن الله واتمني لكم الاستفادة
إخوانكم في الله
محمد محمود hawy_php
أشرف السمهوري sBForum
المصدر:
http://www.devpedia.org/articles/index.php?p=59