EbNCaNa

العالم الآخر

درس : دالة php لعمل مسار الطريق Bread Crumbs

with 8 comments

السلام عليكم ورحمة الله وبركاته

كيف حالكوا ان شاء الله خير ؟؟ كيف انتوا ورمضان ؟؟ كلو تمام ؟؟ الي ما بصوم يطلع من الموقع بسرعة … حتى كمان شوي بدي ابني دالة تعرف اذا الي فايت على الموقع صايم او لا … اذا مش صايم بتعملو طرد اوتوماتيكي !! مش تسدقوا بمزح :p

المهم يا جماعة اليوم درسنا حلو كثير وفيو شرح لكيفية عمل وبناء دالة بلغة php وظيفتها تعمل مسار الطريق Bread Crumbs لأي صفحة موجود بالسكربت او البرمجية الي عندك … وعشان تزبط هيك دالة لازم تتوفر بعض الشروط البسيطة .

هذا الدرس للمتسوى المتقدّم في لغة php وفيه سنشرح كيفية بناء هذه الدالة مع مثال مفصل لطريقة استدعائها .

في البداية اخواني اخواتي نقوم ببناء جدول قاعدة البيانات الذي سيكون احد نجوم هذا الدرس … نفرض ان لدينا سكربت للاخبار وفيه وكل خبر يتم اضافته يجب ان ينتمي لاحد اقسام الموقع … وبذلك نعم اننا بالضرورة نملك جدول للاقسام … في هذا الجدول سنقوم باضافة 3 حقول ضرورية للعمل عليها والتي ستقوم بتشغيل دالة مسار الطريق .

الحقول التي نحتاجها في قاعدة البيانات :

1- حقل رقم القسم id من نوع int

2- حقل رقم القسم الاب  parent من نوع int

3- حقل اسم القسم من نوع varchar

ملاحظة : الحقل parent سيحوي القيمة 0 بحالة كان القسم هو قسم رئيسي اي انه لا يتبع لقسم آخر .

الآن سنقوم باستعراض كود الدالة ومن ثم شرحها بالتفصيل مع طريقة استدعائها :

Code :

<?

function Gpath($cid, $pathArray = array()){
if($cid !== “0″){
$sql = mysql_query(“select c_id,c_sub,c_parent,c_title from category where id=$cid”);

if(mysql_num_rows($sql) == 1) {
$row = mysql_fetch_assoc($sql);
array_unshift($pathArray, $row);
return Gpath($row['c_sub'], $pathArray);
}
}

return $pathArray;
}

?>

طريقة الاستدعاء :

Code :

<?

// هو متغير رقم القسم الذي نريد جلب مسار الطريق المؤدي اليه $id

$path = Gpath($id);
foreach($path as $item) {
echo ” > <a href=’cats.php?id=$item[c_id]‘>$item[c_title]</a>”;
}

?>

شرح الدالة :

في البداية حبايبي نقوم باستدعاء الدالة عن طريق امر الاستدعاء والذي يجب ان ندخل اليه رقم القسم المراد جلب مسار الطريق الذي سؤدي اليه … وثم نقوم باستخراج النتائج من المصفوفة التي قامت الدالة بتوليدها عن طريق foreach .

في بداية عمل الدالة نقوم بادخال البارمترات التي سنقوم بمعالجتها … وهنا في هذه الدالة سنقوم بمعالجة برامتر رقم القسم اما البارمتر الثاني فهو عبارة عن مصفوفة array والتي ستكون فارغة في بداية تنفيذ الدالة .

في السطر الثاني للدالة سوف نتحقق من ان رقم القسم الذي قمنا بادخاله لا يساوي 0 … لانه ان كان كذلك فانه سيكون قسم رئيسي وبالتالي فانه لا يتبع لأي قسم اخر وهذا يعني اننا لا نحتاج لعمل مسار الطريق بحالة كان المستخدم في صفحة القسم الرئيسي .

في السطر الثالث قمنا بالاستعلام من قاعدة البيانات عن رقم وعنوان ورقم القسم الاب للقسم الذي سوف تعالجه الدالة وقمنا بتحديد الاستعلام بواسطة cid$ وهو رقم القسم … في السطر الرابع نقوم بالتأكد من ان نتائج معينة قد نتجت من هذا الاستعلام فاذا كانت نتيجة الشرط 1 .. اي ان هناك نتيجة واحدة لهذا الاستعلام فانه سينتقل لتنفيذ السطر الخامس .

في السطر الخامس تقوم الادالة باستخراج الحقول التي قمنا بالاستعلام عنها على شكل مصفوفة وهذا بفضل استعمال mysql_fetch_assoc .

في السطر السادس نقوم باستعمال الدالة array_unshift ووظيفة هذه الدالة هي دمج اكثر من مصفوفة في مصفوفة واحدة واخر مصفوفة تدخل اليها هي الاولى في الترتيب عند استخراج بيانات المصفوفة .

في السطر السابع نقوم باستدعاء الدالة Gpath بالكامل … اي اننا قمنا باستدعاء الدالة من داخل نفسها اي ان الدالة تقوم باستدعاء نفسها ذاتيا لتقوم باستخراج جميع اسماء الاقسام التي يتبع لها القسم الهدف بالتسلسل وهذا الامر يولد لنا مسار الطريق .

اسلوب الاستدعاء الذاتي للدالة او Recursive Functions بالانجليزية سنقوم بالحديث عنه لاحقا في موضوع وشرح منفصل .

في السطر الثامن والتاسع قمنا باغلاق حالات الشرط التي قمنا باستخدامها اما في السطر العاشر فقمنا بارجاع قيمة المصفوفة التي تحوي مسار الطريق وفي السطر الحادي عشر اغلقنا الدالة .

وفي النهاية اخواني اتمنى انني قد افدت من كان يبحث عن الفائدة في هذا المجال واتمنى عدم التردد من قبلكم بحالة كان هناك اي سؤال او استفسار حول هذا الموضوع او اي موضوع اخر في المدونة .

اخوكم EbNCaNa

سلامات ورمضان كريم .

8 تعليقات

Subscribe to comments with RSS.

  1. كان من الأولي قبل بدء الشرح التوضيح بماذا تقصد بمسار الطريق ….
    في كل الأحوال جزاكم الله خيراً …

    AmmAr

    نوفمبر 16, 2008 في 1:58 م

  2. اخوي انا ذكرت من البداية انو هالدرس للمستوى المتقدم ومطلح مسار الطريق معروف لكل المحترفين بهاللغة … وحتى للي ما بعرف هوين يفهم هالشي من اسم الدرس ” مسار الطريق ” .

    شكرا على ردك وسنأخذ اقتراحك بعين الاعتبار في مرات قادمة .

    EbNCaNa

    نوفمبر 16, 2008 في 5:03 م

  3. بعد اذنك اخي اريد شرح لهذا الجزء

    if(mysql_num_rows($sql) == 1) {
    $row = mysql_fetch_assoc($sql);
    array_unshift($pathArray, $row);
    return Gpath($row['c_sub'], $pathArray);
    }
    }

    return $pathArray;
    }

    بتفصيل واسف علي اذعاجك

    جزاك الله الف خير علي الداله اخي الكريم

    محمدهلال

    يناير 10, 2009 في 9:56 ص

  4. اخوي الدالة array_unshift وظيفتها دمج مصفوفة مع مصفوفة اخرى وهنا بالدالة لما عملنا استعلام وكانت النتيجة مصفوفة قمنا بدمجها مع المصفوفة الاولى التي تم تعريفها باول سطر للدالة كبارمتر وهي pathArray$ وبعد دمج المصفوفة المستخرجة تقوم الدالة باستدعاء ذاتها مرة اخرى عن طريق المتغير الذي جلب من الاستعلام الاخير cid$ وتقوم بعمل الاستعلام من جديد ودمج المصفوفة مع المصفوفة الاولى والثانية وتبقى الدالة تعيد نفسها وتدمج المصفوفات مع بعض لحد ما تصبح قيمة المتغير هي صفر .

    لمزيد من المعلومات عن الاستدعاء الذاتي تفضل هنا اخوي :

    http://www.communitymx.com/content/article.cfm?cid=7CD16

    الى الامام

    EbNCaNa

    يناير 10, 2009 في 1:12 م

  5. جزاك الف خير اخي الكريم علي الداله الرئعة بجد والحمدلله فهمتها

    محمدهلال

    يناير 10, 2009 في 3:26 م

  6. شكرا لك اخي على الشرح

    تقبل هذه الملاحظات مني

    1 لم تشرح ماذا تقصد بمسار الطريق
    2 لم تضع مثال عن المسار الذي تتحدث عنه… ابسط مثال هو “القسم الرئيسي -> الأخبار -> اخبار اقتصادية ….”

    السلام عليكم
    اخوك عبد الواحد البشيري

    عبد الواحد البشيري

    يناير 31, 2009 في 12:05 ص

  7. يشرفني مرورك اخوي عبد الواحد وبالعكس ملاحظاتك بمحلها لكن العجلة مرات تنسي الشخص وبكل الاحوال بما اني كتبت انو الدرس للمستوى المتقدم فاعتقد انو المتقدم في اللغة يجب ان يعرف ما هو مسار الطريق لكن بالفعل وجب الشرح .

    شكرا جزيلا .

    EbNCaNa

    يناير 31, 2009 في 12:24 م

  8. [...] [...]

    - PHP

    سبتمبر 6, 2009 في 3:34 ص


اترك رد