تعدد الصفحات 2 [ بأسهل الطرق ]
مدرج تحت قسم: دروس
لقد قمت بشرح نظام تعدد الصفحات في عملية استخراج البيانات من قاعدة البيانات MySQL.
جاءني أحد الردود من الأخ محمد ( 2rabia.com ) كي أقوم بوضع درس آخر عن كيفية عمل نظام تعدد صفحات لعرض مجموعة ملفات موجودة داخل المجلد الحالي.
طلبت من الأخ محمد مساعدتي في كتابة الدرس حتى نتناقش فيه بشكل جيد وحتى ننهيه بأسرع وقت، ولا داعي للمزيد من الشرح حول هذا الموضوع.
تطرقت في الدرس الماضي إلى شرح هذا النظام بشكل نظري، يمكنك مراجعة الدرس السابق على الرابط التالي ان لم تكن قرأته من قبل تعدد الصفحات [ بأسهل الطرق ].
الآن، بعد أن تعرفت إلى هذا النظام بشكل نظري وبعد ان قمنا بتطبيقه عملياً بأحد الأشكال يمكننا الدخول مباشرة في هذا الدرس بلا مقدمات نبدأ بشرح الكود البرمجي الذي سنحتاجه في درسنا هذا بسم الله.
قم بتحديد عنوان المجلد في السيرفر الذي تستخدمه والذي تريد عرض ملفاته، وذلك بتخزين المجلد [ المسار ] كمتغير:
$dir = "./photos";
الآن نحدد عدد الملفات التي سنعرضها في الصفحة الواحدة.
$perpage = 6;
الآن اكواد تصحيح رقم الصفحة وتعديله وجعله أكثر أماناً [ لشرح أكبر راجع الدرس
السابق في شرح نفس الاكواد ].
$page = (int) (!isset($_GET["page"]) ? 1 : $_GET["page"]); $page = ($page == 0 ? 1 : $page);
ومن ثم تحديد نقطة بداية عرض الملفات [ رقم اول ملف ].
$startpoint = ($page * $perpage) - $perpage;
لكن هنا الوضع مختلف، في الدرس السابق كنا نحدد عدد النتائج التالية التي سنعرضها، اما هنا فسنحدد رقم آخر ملف يتم عرضه كما حددنا اول رقم. وذلك بإضافة عدد الملفات في كل صفحة إلى رقم اول ملف. بذلك نحصل على قيمة ( آخر ملف + 1 ) أي ان رقم آخر ملف يتم عرضه في الصفحة يساوي ( نقطة النهاية – 1 ).
$endpoint = $startpoint + $perpage;
الآن نريد فتح اتصال بالمجلد الذي قمنا بتحديده في متغير $dir بكل بساطة سنستخدم دالة opendir لفتح مقبض اتصال بالمجلد :
if ($dh = opendir("$dir")) {
مع وجود شرط في الكود السابق إذا تم الفتح بنجاح يتابع عملية جلب الملفات، وإن فشلت ، يطبع رسالة خطأ في النهاية.
الآن نقوم بإنشاء مصفوفة فارغة وهي المصفوفة التي سيتم تخزين اسماء الملفات داخلها.
$files = array();
الآن سوف نقرأ الملفات التي يحتوي عليها المجلد تدريجياً بواسطة دالة readdir وبواسطة حلقة تكرار while بسيطة هكذا.
while (($file = readdir($dh)) !== false) {
هذه الحلقة التي قمنا بفتحها هنا تقوم بإعطاء المتغير $file قيمة باسم الملف التالي، طبعأً الملف الأول ثم الثاني وهكذا في كل دورة loop، وذلك عن طريق تمرير مقبض الاتصال بالمجلد إلى دالة readdir ومن ثم التأكد من أن قيمة العملية أو نوعها ( عن طريق !== ) لا يساوي false أي نتأكد من أن العملية ناجحة ثم نقوم بمتابعة العملية داخل الحلقة.
if ($file == "." or $file == ".." or $file == "Thumbs.db") {
continue;
}
خلال هذا الكود. قمنا بالتأكد خلال جملة شرطية أن الملف الحالي الذي نريد طباعته أو إدخاله ضمن مصفوفة الملفات $files ليس عبارة عن ملف المصغرات Thumbs.db أو ملف باسم ” . ” أو ” .. ” إذا كان اسم الملف يطابق أحد هذه الأسماء الثلاثة فإنه يتم تجاهل هذه الدورة loop والذهاب إلى الدورة التالية، ومن ثم نغلق جملة الشرط if.
إذا لم يكن الملف أحد الأسماء الثلاثة السابقة فإنه لن يتم تجاوز هذه الدورة loop، بهذا سيتم تنفيذ الكود التالي داخل الحلقة، والكود التالي هو الذي سيقوم اضافة الملف إلى مصفوفة الملفات التي سيتم عرضها.
$files[] = $file;
الآن سوف نغلق كود حلقة while.
}
الآن نقوم بحساب عدد الملفات التي تم جمعها ضمن مصفوفة الملفات التي سيتم عرضها ضمن البرنامج من خلال دالة count التي تقوم بحساب عدد عناصر المصفوفة التي يتم تمريرها خلالها.
$files_num = count($files);
الآن سوف نضع عنوان في الوسط يبين عدد الملفات المعروضة خلال البرنامج.
echo " <center>عدد الملفات = ".$files_num." <hr color="#0080ff" width="30%" />";
في عملية جلب الملفات التي نريدها ضمن حدود قيمة متغير $startpoint و $endpoint نحتاج إلى عداد حتى نعرف رقم الملف الحالي، لذلك نقوم بجعل القيمة الافتراضية
للعداد تساوي قيمة رقم اول ملف نريد عرضه حتى نبدأ منه ولا نبدأ جولتنا من الصفر.
$counter = $startpoint;
الآن نقوم بإنشاء جدول لعرض الملفات ، وفيه ننشئ أول سطر بوسم TR في الـ html.
echo " echo "<table><tr>";
الآن نريد التأكد من أن قيمة العداد التي أنشأناه في المتغير $counter أصغر من العدد الإجمالي للملفات الموجودة في المجلد، بالإضافة إلى التأكد من أن قيمة العداد أيضاً تساوي أو أكبر من نقطة البداية $startpoint وأنها أصغر من نقطة النهاية أيضاً$endpoint. وتلك الشروط كلها ضمن حلقة تكرار while كما يلي.
while($counter < $files_num && $counter >= $startpoint && $counter < $endpoint){
الآن نقوم بطباعة الملف المطلوب محاطاً بوسم a لجعله كرابط يؤدي إلى ذلك الملف.
echo "<td><a href='$dir/$files[$counter]'>
<img src='$dir/$files[$counter]' border='0' width='150' height='150'>
</td>";
الآن نقوم بزيادة عداد $counter بمقدار 1.
$counter++;
الآن نقوم بإغلاق جملة حلقة التكرار while.
}
وأخيراً كود عرض أرقام الصفحات ووصلاتها.
$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 ";
}
ومن ثم اذا لم يتم فتح المجلد بنجاح كما ذكرت في بداية الدرس سيتم إظهار رسالة خطأ كالتالي.
} else {
echo " This Dir Is Wrong ";
}
درس بسيط وسهل باذن الله واتمني لكم الاستفادة.
إخوانكم في الله
محمد محمود hawy_php
أشرف السمهوري sBForum


أستاذ طول عمرك ..
تسلم اناملك يا بطل
الله يسلمك وشكراً لمرورك اخ اسامة :)
ما شاء الله تبارك الله …
شرح اكثر من رااااااائع …
اشكرك اخي …
مشاء الله تبارك الله
شرح رائع
واتمنى مواصلة الدروس لانا بحاجتها فعلا
الله يكثر من امثالك
ما شاء الله تبارك الرحمن
درس رائع وسلس ….. بانتضار الدرس رقم 3 :)
تقبل تحياتى .
ما شاء الله شرح ولا اروع
بس اخوي انا عندي سؤال بسيط
الان انا عملت والحمد لله سكربت سجل زوار وهو على الرابط التالي
http://www.a90a.com/sgl
وسوف تلاحظ ان جميع الردود اتت في صفحة واحدة
سؤالي هو كيف اوزع الردود او التواقيع فتصبح
كل خمسة تواقيع في صفحة مستقلة
وتقبل احترامي وتقديري
اخوك
شقاوي
اعذرني أخي شقاوي على التأخر في الرد ..
يمكنك العودة إلى تعدد المواضيع 1 …
تفضل :
http://www.almashroo.com/?p=35
والله درس ما شاء الله عليه وما قصرت حبيبي
100% على الدرس بس الروابط مش شغالة
لك الشكر