تعدد الصفحات 2 [ بأسهل الطرق ]

مدرج تحت قسم: دروس
7 سبتمبر 2006

لقد قمت بشرح نظام تعدد الصفحات في عملية استخراج البيانات من قاعدة البيانات 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

للكاتب sBForum

  • Share/Bookmark

التعقيبات

  1. غير معروف

التعليقات (8) على ”تعدد الصفحات 2 [ بأسهل الطرق ]“

  1. أستاذ طول عمرك ..
    تسلم اناملك يا بطل

  2. الله يسلمك وشكراً لمرورك اخ اسامة :)

  3. ما شاء الله تبارك الله …

    شرح اكثر من رااااااائع …

    اشكرك اخي …

  4. فهد

    مشاء الله تبارك الله

    شرح رائع

    واتمنى مواصلة الدروس لانا بحاجتها فعلا

    الله يكثر من امثالك

  5. ما شاء الله تبارك الرحمن

    درس رائع وسلس ….. بانتضار الدرس رقم 3 :)

    تقبل تحياتى .

  6. ما شاء الله شرح ولا اروع

    بس اخوي انا عندي سؤال بسيط

    الان انا عملت والحمد لله سكربت سجل زوار وهو على الرابط التالي

    http://www.a90a.com/sgl

    وسوف تلاحظ ان جميع الردود اتت في صفحة واحدة

    سؤالي هو كيف اوزع الردود او التواقيع فتصبح

    كل خمسة تواقيع في صفحة مستقلة

    وتقبل احترامي وتقديري

    اخوك

    شقاوي

  7. اعذرني أخي شقاوي على التأخر في الرد ..
    يمكنك العودة إلى تعدد المواضيع 1 …
    تفضل :
    http://www.almashroo.com/?p=35

  8. والله درس ما شاء الله عليه وما قصرت حبيبي

    100% على الدرس بس الروابط مش شغالة
    لك الشكر

أضف تعليقك




يمكنك استخدام الوسوم التالية في التعليق: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


* حقول مطلوبة