النتائج 1 إلى 7 من 7

الموضوع: طريقة طباعة الردود الفرعية إلى ما لا نهاية

  1. #1
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600

    طريقة طباعة الردود الفرعية إلى ما لا نهاية



    السلام عليكم

    المقصود من الموضوع هو طباعة التعليق حسب ترتيب طبقي:
    كود PHP:
    title1
    -title3
    --title5
    --title8
    -title4
    -title7
    --title9
    ---title10
    title2
    -title6 
    هذه هي قاعدة البيانات التي لدينا
    وهي تمامًا ما يتم تخزينه في ال mysql لكن فضّلت وضعها على شكل مصفوفة حتى لا ادخل
    في تفاصيل الاتصال بقواعد البيانات:
    كود PHP:
    $data = array(
    0=>array("id"=>1,"title"=>"title1","parent"=>0),
    1=>array("id"=>2,"title"=>"title2","parent"=>0),
    2=>array("id"=>3,"title"=>"title3","parent"=>1),
    3=>array("id"=>4,"title"=>"title4","parent"=>1),
    4=>array("id"=>5,"title"=>"title5","parent"=>3),
    5=>array("id"=>6,"title"=>"title6","parent"=>2),
    6=>array("id"=>7,"title"=>"title7","parent"=>1),
    7=>array("id"=>8,"title"=>"title8","parent"=>3),
    8=>array("id"=>9,"title"=>"title9","parent"=>7),
    9=>array("id"=>10,"title"=>"title10","parent"=>9)
    ); 
    هذا بالضبط ما يمكن جلبه من قواعد البيانات عند الاستعلام

    الان نرتب البيانات في مصفوفة جديدة حسب الparent
    ونستدعي الدالة المسؤولة عن الطباعة:
    كود PHP:
    $parent = array();

    foreach (
    $data as $k=>$v)
    $parent[$v['parent']][]=$v;

    print_replys($parent,0); 
    واخيرًا هذه هي الدالة المسؤولة عن الترتيب:
    كود PHP:
    function print_replys(array $tree,$index,$depth=0)
    {
    if (
    count($tree[$index])==0)return ;

    foreach (
    $tree[$index] as $v):
    echo 
    "<p>".str_repeat("-",$depth);
    echo 
    "{$v['title']}</p>";
    print_replys($tree,$v['id'],$depth+1);
    endforeach;

    وهي تعمل عن طريق ال backtracking
    اي استدعاء الدالة داخل حلقة تكرار في الدالة نفسها

    الكود كامل:
    كود PHP:
    <?php
    $data 
    = array(
    0=>array("id"=>1,"title"=>"title1","parent"=>0),
    1=>array("id"=>2,"title"=>"title2","parent"=>0),
    2=>array("id"=>3,"title"=>"title3","parent"=>1),
    3=>array("id"=>4,"title"=>"title4","parent"=>1),
    4=>array("id"=>5,"title"=>"title5","parent"=>3),
    5=>array("id"=>6,"title"=>"title6","parent"=>2),
    6=>array("id"=>7,"title"=>"title7","parent"=>1),
    7=>array("id"=>8,"title"=>"title8","parent"=>3),
    8=>array("id"=>9,"title"=>"title9","parent"=>7),
    9=>array("id"=>10,"title"=>"title10","parent"=>9)
    );

    $parent = array();

    foreach (
    $data as $k=>$v)
    $parent[$v['parent']][]=$v;

    print_replys($parent,0);

    function 
    print_replys(array $tree,$index,$depth=0)
    {
    if (
    count($tree[$index])==0)return ;

    foreach (
    $tree[$index] as $v):
    echo 
    "<p>".str_repeat("-",$depth);
    echo 
    "{$v['title']}</p>";
    print_replys($tree,$v['id'],$depth+1);
    endforeach;
    }
    ?>






    التعديل الأخير تم بواسطة ahmad sadiq ; 20-01-2011 الساعة 06:40 PM


  2. #2


    ما شاء الله شرح جميل تشكر علية

    ولو أنة فية شواية تعقيد لكن الواحد لازم يركز شواية عشان يقدر يفهمة





    __________________
    لا إله إلا الله محمد رسول الله

  3. #3


    ما شاء الله شرح جميل تشكر علية

    ولو أنة فية شواية تعقيد لكن الواحد لازم يركز شواية عشان يقدر يفهمة
    لا يوجد تعقيد أخي ، فقط لاحظ أن الطريقة هي وضع دالة في حلقية تكرار ، أستخدم مثلها لكن أضع إستدعاء داخلي للدالة في نفسها في حال لم يتم العثور على نتيجة

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

    نقلتها لكم من الرسائل الخاصة :

    كود PHP:
    <?
    mysql_connect
    ("localhost""rifizm""********");
    mysql_select_db("db");
     
     
    function 
    cats($current_cat_id null,$cat_id=0)
    {
     
        
    $query mysql_query("SELECT * FROM `cat` WHERE `cat_id` = $cat_id LIMIT 1");
     
        while(
    $result mysql_fetch_array($query))
        {
        
    extract($result);
     
        echo 
    $title . ( ( $id $current_cat_id ) ? "" " > " );
     
        if ( 
    $id $current_cat_id and $current_cat_id != null ) return ;
     
        
    cats($current_cat_id,$id);
        }
    }
     
    cats();
    // عرض جميع الأقسام في مسار (قد لا تنفعك هذه) ، الخرج :
    //cat #0 > subcat #1 > subsubcat #2 > subsubsubcat #3 > subsubsubsubcat #4 > subsubsubsubsubcat #5 > subsubsubsubsubsubcat #6 > subsubsubsubsubsubsubcat #7 >  
     
    echo '<br /><br /><br />';
     
    cats(5);
    // عرض مسار الأقسام الأبوية حتى رقم القسم الحالي ، تجلب القسم الحالي عبر GET أو SEGMENT في CI مثلا ... ، الخرج :
    //cat #0 > subcat #1 > subsubcat #2 > subsubsubcat #3 > subsubsubsubcat #4 > subsubsubsubsubcat #5 >  
     
    echo '<br /><br /><br />';
     
    cats(4,2);
    // عرض مسار الأقسام إبتداءً من الأب (2) حتى القسم الحالي (4) ، الخرج :
    //subsubcat #2 > subsubsubcat #3 > subsubsubsubcat #4 >  
    ?>
    sql

    كود PHP:
    CREATE TABLE IF NOT EXISTS `cat` (
      `
    idint(11NOT NULL AUTO_INCREMENT,
      `
    cat_idint(11NOT NULL,
      `
    titlevarchar(250COLLATE utf8_bin NOT NULL,
      
    PRIMARY KEY (`id`)
    ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=;

    INSERT INTO `cat` (`id`, `cat_id`, `title`) VALUES
    (10'cat #0'),
    (
    21'subcat #1'),
    (
    32'subsubcat #2'),
    (
    43'subsubsubcat #3'),
    (
    54'subsubsubsubcat #4'),
    (
    65'subsubsubsubsubcat #5'),
    (
    76'subsubsubsubsubsubcat #6'),
    (
    87'subsubsubsubsubsubsubcat #7'); 
    يجدر بالذكر (للمبتدئين) أني كتبت مثالا و ليس دالة للإستخدام ، لأنك ستجد مشاكل معها على شكلها الحالي ، و هذا يدعوك للإجتهاد لتعدل عليها ، طبعا لأني لا أحب إعطاء أكواد جاهزة مثل صديقي أحمد

    بالتوفيق .






  4. #4
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    269


    بارك الله فيك اخي احمد

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

    وهكذا مع بقية الأقسام .

    بارك الله فيك .





    __________________
    اذا اردت فحص البيج رانك لعدة مواقع في لحظة واحدة يمكنك التواجه الى الرابط http://www.almzn.net/pagerank_alexa/
    مبــ PHP@MYSQLــــرمج ومـصـمم
    لطلب برمجة راسلنا على الإيميل fa.isl#hotmail.com مع استبدال # بـ@

  5. #5
    عضو نشيط
    تاريخ التسجيل
    Apr 2010
    المشاركات
    119


    بارك الله فيكم






  6. #6
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    بارك الله فيك اخي احمد

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

    وهكذا مع بقية الأقسام .

    بارك الله فيك .

    نستعمل الاجاكس + تاغ ال ul
    كالتالي:
    كود PHP:
       <?php
    $data 
    = array(
    0=>array("id"=>1,"title"=>"title1","parent"=>0),
    1=>array("id"=>2,"title"=>"title2","parent"=>0),
    2=>array("id"=>3,"title"=>"title3","parent"=>1),
    3=>array("id"=>4,"title"=>"title4","parent"=>1),
    4=>array("id"=>5,"title"=>"title5","parent"=>3),
    5=>array("id"=>6,"title"=>"title6","parent"=>2),
    6=>array("id"=>7,"title"=>"title7","parent"=>1),
    7=>array("id"=>8,"title"=>"title8","parent"=>3),
    8=>array("id"=>9,"title"=>"title9","parent"=>7),
    9=>array("id"=>10,"title"=>"title10","parent"=>9)
    );

    $parent = array();

    foreach (
    $data as $k=>$v)
    $parent[$v['parent']][]=$v;

    $result = array();

    print_replys($parent,0);


    function 
    print_replys(array $tree,$index,$depth=0)
    {
    global 
    $result;
    if (
    count($tree[$index])==0){ return;} 

    foreach (
    $tree[$index] as $v):
    echo 
    "<ul id='u_".$v['id']."'>";
    echo 
    "<li>{$v['title']}</li>";
    print_replys($tree,$v['id'],$depth+1);
    echo 
    "</ul>" ;
    endforeach;

    }


    ?> 

    <script type="text/javascript" 
            src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
    google.load("jquery", "1.4.4");
    google.setOnLoadCallback(function() {

    $("ul").toggle(function(){$("#"+this.id+" >ul").hide();},function(){$("#"+this.id+" >ul").show();});

    });
    </script>







  7. #7
    عضو نشيط
    تاريخ التسجيل
    Jul 2008
    المشاركات
    269


    نستعمل الاجاكس + تاغ ال ul
    كالتالي:
    كود PHP:
       <?php
    $data 
    = array(
    0=>array("id"=>1,"title"=>"title1","parent"=>0),
    1=>array("id"=>2,"title"=>"title2","parent"=>0),
    2=>array("id"=>3,"title"=>"title3","parent"=>1),
    3=>array("id"=>4,"title"=>"title4","parent"=>1),
    4=>array("id"=>5,"title"=>"title5","parent"=>3),
    5=>array("id"=>6,"title"=>"title6","parent"=>2),
    6=>array("id"=>7,"title"=>"title7","parent"=>1),
    7=>array("id"=>8,"title"=>"title8","parent"=>3),
    8=>array("id"=>9,"title"=>"title9","parent"=>7),
    9=>array("id"=>10,"title"=>"title10","parent"=>9)
    );

    $parent = array();

    foreach (
    $data as $k=>$v)
    $parent[$v['parent']][]=$v;

    $result = array();

    print_replys($parent,0);


    function 
    print_replys(array $tree,$index,$depth=0)
    {
    global 
    $result;
    if (
    count($tree[$index])==0){ return;} 

    foreach (
    $tree[$index] as $v):
    echo 
    "<ul id='u_".$v['id']."'>";
    echo 
    "<li>{$v['title']}</li>";
    print_replys($tree,$v['id'],$depth+1);
    echo 
    "</ul>" ;
    endforeach;

    }


    ?> 

    <script type="text/javascript" 
            src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
    google.load("jquery", "1.4.4");
    google.setOnLoadCallback(function() {

    $("ul").toggle(function(){$("#"+this.id+" >ul").hide();},function(){$("#"+this.id+" >ul").show();});

    });
    </script>
    بارك الله فيك ورفع الله قدرك

    بارك الله فيك ورفع الله قدرك !

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





    __________________
    اذا اردت فحص البيج رانك لعدة مواقع في لحظة واحدة يمكنك التواجه الى الرابط http://www.almzn.net/pagerank_alexa/
    مبــ PHP@MYSQLــــرمج ومـصـمم
    لطلب برمجة راسلنا على الإيميل fa.isl#hotmail.com مع استبدال # بـ@





ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض