قصة مثل

الرئيسة مركز التحميل من أنا؟ محرر HTML اتصل بنا
( أوابد ) مدونة عبد الرحمن بن ناصر السعيد

مادة صوتية شعرية

 
مطلع القصيدة
أحارَ بنَ عَمرٍو كأنِّي خَمِرْ * ويعدو على المرءِ ما يَأْتَمِرْ
الشاعر:
امرؤ القيس
إلقاء
:عبد الرحمن السعيد
اضغط على بدء التشغيل وانتظر قليلا
اضغط هنا
إذا ظهرت لك مشكلة في الاستماع فاضغط هنا لحلها
 

تراث العرب

 
الاستشارة اللغوية
ديوان العرب
نثر العرب
المعجم
الأعداد كتابةً
 

أضخم مقالة لهذا اليوم

 ليست هناك أي مقالة اليوم 

روابط أخرى

 
  • الأربعون النووية
  • دليل المواقع
  • البوابات
  • إرشادات
  • الموسوعة
  • الإخبار عن موقعنا
  • الأقسام
  • إحصاءات
  • خزانة المقالات
  • نشر مشاركة
  • التصويت
  • الأكثر
  • المقالات الـ10 الأخيرة
  • حسابك
  • الرسائل الخاصة
  •  

    حركة الموقع

     
    عدد الزوار
    اليوم : 50
    الشهر : 2544
    السنة : 15314
    الجميع : 851559
    أكثر عدد للزوار : 25130 بتأريخ : 10/6/2008 ..
     

    برنامج إلى صلاتي

       

    البحث

     


     

    كائن الأقسام الفرعية المتعددة
    كُتبت المقالة بتأريخ الأحد14/ رجب/1425 الموافق 29/8/2004 مسيحية

    البرمجة عبد الرحمن السعيد كتب "ليست العبرة عندي المبرمجين بنتيجة البرمجة الظاهرة، بل العبرة بالأداء الذي يُظهر النتيجة، فيمكن إخراج النتيجة بطريقتين أو أكثر تكون إحداهما خفيفة على مترجم PHP وتوابعه، وتكون الأخرى ثقيلة على المترجم وتوابعه.

    ومن الأمور التي طُرحت بين المبرمجين العرب قضية الأقسام الفرعية بلا عدد نهائي (قسم داخل قسم، وتحت هذا القسم أقسام وهلم جرا).


    وقد حاول عدد من المبرمجين إيجاد حل لهذه الطريقة، بعضهم أظهرها وبعضهم أخفاها.

    ومن أوائل الذين ابتكروا طريقة للأقسام الفرعية المتعددة الأخ رفيع العتيبي منشئ مجلة البوابة العربية، وهي طريقة عملية يمكنها إنشاء أقسام فرعية مرقمة بلا عدد نهائي

    وإليك الدالة التي برمجها الأخ رفيع العتيبي

    $this->DoCode('
    function listJumpf($listJump,$catid)
    {
    global $row,$cat_id;
    $Jump .= ' ';
    $Jump .= "حدد قسم مما يلي";
    $Jump .= " -------------------------------- ";
    $result= $this->query("select * from rafia_cat where catType='$catid' and subcat='0' order by ordercat ASC");
    $li = 1;
    while($row=$this->dbarray($result))
    {
    $Jump .= " $li ) " . $row["title"] . "";
    // $li;
    $Jump .= $this->sublistJump($listJump,$row['id'],$li);
    $Jump .= " -------------------------------- ";
    $li++;
    }

    $Jump .= ' ';
    return $Jump;
    }
    //---------------------------------------------------
    // تابعة لدالة السابقة وتضيف التصنيفات الفرعية /
    //---------------------------------------------------

    function sublistJump(&$listJump,$id,$J)
    {
    global $row;
    $result = $this->query("SELECT * FROM rafia_cat WHERE subcat='$id' ORDER BY ordercat");
    if($this->dbnumrows($result)>0)
    $li = 1;
    while($row=$this->dbarray($result))
    {
    $Jump .= "$J ) » $li ) " . $row["title"] . "";
    $l = $J." ) » ".$li;
    $Jump .= $this->sublistJump($listJump,$row['id'],$l);
    $li++;
    }
    return $Jump;
    }
    ','php')

    لكن الأخ رفيعا العتيبي أول من يعلم أن هذه الدالة على قوتها تسبب ضغطا لقاعدة البيانات؛ لأن الدالة الأولى تستدعي الأقسام العامة باستعلام واحد، وأما الدالة الثانية فتكرر الاستعلام من قاعدة البيانات على حسب عدد الأقسام الفرعية، فلو كان عندك 10 أقسام عامة تحت كل قسم خمسة أقسام فرعية متتالية فإن مجموع الاستعلامات سيكون وحدا وخمسين استعلاما.

    وهذا بلا شك يسبب ضغطا للقاعدة، وقد اجتمعت بالأخ رفيع وحاولنا إيجاد حل لهذه المشكلة بحيث لا يكون هناك سوى استعلام واحد؛ لكننا لم نفلح في تلك الليلة.

    بعد هذا استخرجت دالتَيْ الأخ رفيع العتيبي ودرستهما دراسة متأنية، ثم بنيت الكائن.

    وهذا الكائن يعرض لك الأقسام العامة بفروعها غير النهائية مهما كان عددها باستعلام واحد من قاعدة البيانات.

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

    عندما يتسلم الكائن المصفوفة فإنه يقسمها إلى مصفوفتين : مصفوفة تحتوي على الأقسام العامة، ومصفوفة تحتوي على الأقسام الفرعية.

    وفي كل مصفوفة سواء العامة أم الفرعية مصفوفة داخلية تحتوي على ثلاث متغيرات:الرقم التسلسلي للقسم في قاعدة البيانات، واسم القسم، وهل هو عام أو فرعي

    ثم يعرض الكائن الأقسام العامة أولا ضمن حلقة تكرار عن طريقة المصفوفة العامة، وفي أثنائها يختبر هل هناك قسم فرعي لهذا القسم العام؟ وذلك عن طريق المصفوفة الثانية الفرعية.

    ثم يكرر هذه العملية داخل القسم الفرعي إلى أن يتأكد من عدم وجود قسم فرعي نهائي، ثم يعيد النتيجة.

    ثم وضعتُ خيارين:

    الأول : إظهار أرقام الأقسام الفرعية

    الثاني : إظهار أسماء الأقسام الفرعية

    الملف المضغوط يحتوي على ملف الكائن، وعلى ملف قاعدة البيانات، وملف تعليمات

    ازرع ملف القاعدة في أي قاعدة تشاء، ثم تأكد من تغيير معلومات الاتصال بالقاعدة.

    الكائن :

    $this->DoCode('
    class JumpListClass {
    /* ########################################## اسم الكائن : الأقسام الفرعية المتعددة رقم الإصدار : 1 المبرمج : عبد الرحمن بن ناصر السعيد الموقع : http://www.toarab.ws - http://www.toarab.org البريد الإلكتروني : webmaster@toarab.ws - ababab90@yahoo.com تأريخ البرمجة : يوم الأحد الموافق 14/رجب/1425 هـ ----------------------------------- طريقة الاستعمال: ************* 1) استعلم من قاعدة البيانات عن الرقم التسلسلي، اسم التصنيف، عام أو فرعي، الترتيب $result =mysql_query("SELECT id,title,subcat FROM cat ORDER BY ordercat ASC"); id = الرقم التسلسلي التلقائي title = اسم التصنيف سواء أكان عاما أم فرعيا subcat = التصنيف العام تكون قيمته صفر، وأما التصنيف الفرعي فتكون قيمته الرقم التسلسلي للتصنيف العام id ************* 2) أنشئ مصفوفة بأي اسم، مثلا $Master = array(); ************* 3) اعمل حلقة تكرار لجلب المعلومات كاملة من قاعدة البيانات while ($row = mysql_fetch_array($result)) { // فك متغيرات الحلقة extract($row); //وضع المتغيرات في مصفوفة $Master[] = array ('id'=>$id,'title'=>"".$title."",'subcat'=>$subcat); } ************* 4) أنشئ الكائن بأي اسم، مثلا : $MainAndSub = new JumpListClass; ************* 5) حدد رابط الانتقال للصفحة، عند اختيار أي قسم فإلى أي صفحة ينتقل؟ وما اسم المتغير؟ : $url = $_SERVER['PHP_SELF']."?id="; ************* 6) اطبع الكائن : echo $MainAndSub->DoJumpList($Master,$url,1); هناك خياران : رقم (1) تعني إظهار أرقام الأقسام الفرعية رقم (2) تعني إظهار أسماء الأقسام الفرعية (لا يستحسن اختياره إذا كانت الأقسام الفرعية كثيرة؛ لأنه يشعب الصفحة) يستحسن تحرير الذاكرة للمصفوفة unset($Master); ------------------------------------------------------------------- @Name : JumpListClass @Versoin : 1 @Author : Abdurrhman bin Nasir Assaeed @Web Site : http://www.toarab.ws - http://www.toarab.org @E-mail : webmaster@toarab.ws - ababab90@yahoo.com @Date : 29/08/2004 */ var $Main = array(); var $Sub = array(); var $Url; Var $Type; function DoJumpList ($Master,$Url,$Type=1) { $this->Main = $this->SetMain($Master); $this->Sub = $this->SetSub($Master); $this->Url = $Url; $this->Type = $Type; return $this->Build(); } function SetMain($Master) { $Main= array(); for($i=0;$i"; $Form .= ""; $Form .= ""; $Mn = 1; $size = sizeof($this->Main); for($i=0;$i<$size;$i++) { $Form .= ""; $Form .= $this->SubList($this->Main[$i]['id'],$Mn); if($i<($size-1)) { $Form .= ""; } $Mn++; } $Form .= ""; //Free Memory unset($this->Main); unset($this->Sub); return $Form; } function SubList($id,$Mn,$Sn=""){ $b_id = array(); $b_title = array(); for($i=0;$iSub);$i++) { if($id==$this->Sub[$i]['subcat']) { $b_id[]= $this->Sub[$i]['id']; $b_title[] = $this->Sub[$i]['title']; } } if (empty($b_id)) { return; } else { $Sn=1; } if (count($b_id) > 1 ) { $Form =""; for($i=0;$iUrl.$b_id[$i].""> ".$Mn." ) » ".$Sn." ) ".$b_title[$i].""; $Mn2 = $Mn." ) » ".$this->ListType($Sn,$b_title[$i]); $Form .=$this->SubList($b_id[$i],$Mn2); $Sn++; } } else { $Form = ""; $Mn2 = $Mn." ) » ".$this->ListType($Sn,$b_title[0]); $Form .=$this->SubList($b_id[0],$Mn2,$Sn); } //Free Memory unset($b_id); unset($b_title); return $Form; } function ListType($Sn,$b_title) { if($this->Type>2) $this->Type =1; if($this->Type==1) { return $Sn; } else if($this->Type==2) { return $b_title; } } }// End class ','php')

    وأخيرا:

    الشكر موصول للأخ رفيع العتيبي الذي ابتكر الدالة الأولى، وطريقة عرض الأقسام مرقمة، ومنها استفدت في بناء الكائن، فله فضل السبق


    الملف

    اضغط هنا

    لمناقشة الموضوع في المنتدى


    "

     

    روابط ذات صلة

     · تفاصيل عن: البرمجة


    أكثر موضوع قرئ في: البرمجة:
    كائن تعدد الصفحات، الإصدار الثاني PHP

     

    تقويم المقالة

     
    معدل التقويم: 4.66
    عدد المصوِّتين: 15


    يمكنك تقويم المقالة من هنا:

    ممتاز
    جيد جدا
    جيد
    لا بأس
    سيء


     

    خيارات

     
     صفحة للطباعة  صفحة للطباعة

     
     

    باستخدام برنامج PHP-Nuke

    نقله إلى العربية وطوره : عبد الرحمن بن ناصر السعيد
    يمكنك جلب آخر المقالات من موقعنا باستخدام ملف backend.php أو ملف ultramode.txt


    Web site engine\'s code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.
    مدة تحميل الصفحة: 0.028 ثانية