ساختار منو زیر منو (شاخه درختی )

sajadmaz

Member
سلام

همینطور که میدونین برای ساختن شاخه درختی توی دیتا بیس یک id داریم و یک parentID و برای نمایش دادن گروه ها و زیر گروههای این شاخه ها از حلقه استفاده میکنیم مثلا اگر یک گروه با 2 زیر مجموعه داشته باشیم برای هر زیر مجموعه باید یک حلقه بزاریم که این منطقی نیست چون ما که نمیدونیم شاید یک گروه تا 20 زی مجموعه داشت نمیشه که 20 تا حلقه تو در تو بزاریم (Unlimite ) کسی راه حل منطقی بنظرش میرسه ؟؟؟


ممنون
 

D.A.V.O.O.D

Member
سلام
چرا این کار رو کنیم ؟
کد زیر را نگاه کن ، فقط با دو حلقه :
PHP:
$SQL = "select * from `cats` order by `id` ASC";
$Query = mysql_query( $SQL );
while( $r = mysql_fetch_array( $Query ) )
{
   print $r['name']."<br>";
   $Query2 = mysql_query( "select * from `subcats` where `cat_id` = '$[id]' order by `id` ASC" );
   while( $t = mysql_fetch_array( $Query2 ) )
   {
       print $t['name']."<br>";
   }
}

البته این شاخه بندیش به صورت یه زیر شاخه است ، یعنی خود زیر شاخه ها ، دارای زیر شاخه نیستند ! اگه بخواهی این کار را کنی چاره ای جز حلقه های تو در تو فکر نمی کنم داشته باشه !
 
آخرین ویرایش:

sajadmaz

Member
نه دیگه ! همش توی یه تیبل و بصورت نا محدود زیر شاخه داشته باشه هر گروه ساختارش توی دیتا بیس رو فهمیدم به جه صورتی هست اما نحوه اجرای کوئری و حلقه هاش چون منطقی نیست که واسه هر زیر شاخه یک حلقه بنویسم کد شما کلا یک زیر مجموعه داره تصور کنید بصورت نا محدود نمیشه که واسه حر زیر مجموعه یک تیبل ساخت
 

D.A.V.O.O.D

Member
نه دیگه ! همش توی یه تیبل و بصورت نا محدود زیر شاخه داشته باشه هر گروه ساختارش توی دیتا بیس رو فهمیدم به جه صورتی هست اما نحوه اجرای کوئری و حلقه هاش چون منطقی نیست که واسه هر زیر شاخه یک حلقه بنویسم کد شما کلا یک زیر مجموعه داره تصور کنید بصورت نا محدود نمیشه که واسه حر زیر مجموعه یک تیبل ساخت

خب نه ! من چون استدلالم بر این بوده که زیر شاخه ها ، خود دارای زیر شاخه نباشند ، اینجوری دو تا تیبل براش فرض کردم . اگه اینطوری که شما می خوای میشه توی یه تیبل هم کرد ، اما راهی جز حلقه های تو در تو نیست ، درسته شاید منطقی نباشه ، اما خب تنها راهشه ! ( یا حداقل تنها راهی هست که به ذهن من می رسه )
 

sajadmaz

Member
نه مطمئنن یک راه دیگه ای هست چون من این جور نمونه هارو زیاد دیدم مثل فروشگاه ham3d
 

D.A.V.O.O.D

Member
نه مطمئنن یک راه دیگه ای هست چون من این جور نمونه هارو زیاد دیدم مثل فروشگاه ham3d
ببین فروشگاه حامد را دقت کنی تمام شاخه ها و زیر شاخه ها را با هم نشون نمی ده ! وقتی روی شاخه کلیک می کنی زیر شاخه های اون را نشون می ده ! با ای جکس به راحتی میشه همچین کاری کرد .
 

P.H.P

Member
سلام

همینطور که میدونین برای ساختن شاخه درختی توی دیتا بیس یک id داریم و یک parentID و برای نمایش دادن گروه ها و زیر گروههای این شاخه ها از حلقه استفاده میکنیم مثلا اگر یک گروه با 2 زیر مجموعه داشته باشیم برای هر زیر مجموعه باید یک حلقه بزاریم که این منطقی نیست چون ما که نمیدونیم شاید یک گروه تا 20 زی مجموعه داشت نمیشه که 20 تا حلقه تو در تو بزاریم (Unlimite ) کسی راه حل منطقی بنظرش میرسه ؟؟؟


ممنون

برای اینکه تعداد زیاد هست باید از تابع استفاده کنی

PHP:
function dynamic_menu($parent = 0)
{
    $flag = false;

    global $menu_array;

    foreach($menu_array as $key => $value)
    {
        if ($value['parent'] == $parent) 
        {       
            if ($flag === false)
            {
                    $flag = true;

                    echo '<ul>';
            }

            echo '<li>' . $value['name'];

            dynamic_menu($key);
            echo '</li>';
        }
    }

    if ($flag === true)
        echo '</ul>';
}
 

foranyone

Well-Known Member
من برای هر رکورد تعین کردم که پدرش کیه

حالا وقتی میخوام بچه هاش رو پیدا کنم :

پدر کی یه عدد خاصه ؟

وقتی میخوام پدر بچه رو هم پیدا کنم خیلی راحت تو همون رکورد بچه نوشته شده
 

Allahparast

Member
من برای هر رکورد تعین کردم که پدرش کیه

حالا وقتی میخوام بچه هاش رو پیدا کنم :

پدر کی یه عدد خاصه ؟

وقتی میخوام پدر بچه رو هم پیدا کنم خیلی راحت تو همون رکورد بچه نوشته شده

ایشون مشکلشون این نیست این رابطه به نبره هم میکشه :shock: من که فکرم به جای نرسید !
 

sajadmaz

Member
از همه ی دوستان کمال تشکر رو دارم تاحالا دوتا آیینه رو روبه روی هم قرار دادین ببینین چه اتفاقی می افته ؟ این قضیه همینجوره
function to function مثل همین که دوستمون گفت البته بهتر بود Query رو مستقیم بگیره البته من این رو تست نزدم بازم ممنون

دیگه از مخم داره دود بلند میشه :ی
 

madisline

Member
سلام.
من چند وقت پیش رو یه همچین سیستمی کار کردم. اون سیستم روشش به اینصورت بود که هر عضو میتونست 2 زیرمجموعه برای خودش داشته باشه و زیرمجموعه های اونها هم به همین روال تا بی نهایت. اگه سیستم شما هم میخواد به همین سبک کار کنه بگو تا راهنماییت بکنم.
 

parsiteam

Member
خب به نام خدا شروع میکنیم : با دقت فقط بخون داداشی

1 . اول میای موضوعات اصلیتو با کوئری میگیری . مثلا موضوع اصلی رو توی بخش تیبل اینکه اصلیه یا نه 0 بزار . اینطوری :


PHP:
                       $SQL = "select * from `cats` where `cat_sub`='0' order by `cat_id` ASC";
2 . حالا یک حلقه تشکیل میدی و تک تک موضوعات اصلیتو بررسی میکنی . واسه هرکددومشون اول نمایشش میدی . بعد میای یک کوئری میگیری و اونایی که cat_sub اونا با cat_id برابره رو میاری بیرون . اینطوری مثلا :

PHP:
                       $SQL = "select * from `cats` where `cat_sub`=''.$Query['cat_id'].'' order by `cat_id` ASC";
3 . همینطوری با دو تا حلقه میتونی کارتو انجام بدی . فقط اگر تعداد زیر موضوع تموم شد باید با دستور continue بری اول حلقه و آیدی بعدی رو چک کنی .


من اینو واسه یک پروژم نوشتم . ولی متاسفانه هاردم فرمت شد و پاک شد وگرنه عین کدمو میزاشتم برات .


موفق باشی
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا