آفلاین
user-avatar

گرفتن تمامی دسته های فرزند یک دسته خاص

3 سال پیش
توسط محمود آپدیت شد
آفلاین
user-avatar
alitna ( 99 تجربه )
3 سال پیش

سلام .
من داخل ووکامرس ، دسته ها ، یکسری دسته هایی رو ایجاد کردم و میشه گفت parent child های زیادی داره .
به فرض مثال زیر :

car
    pride
house
    cat۱
        big
        small
            red
            green
            blue
        little
    cat۲
        tiny
    cat۳
animal
    cat
    bird

الان کدی رو نیاز دارم ک به فرض آیدی دسته cat۱ رو بهش دادم ، کامل با استایل li و ul بیاد کل منو زیرش رو چاپ کنه :

cat۱
    big
    small
        red
        green
        blue
    little

کدهای متفاوتی رو پیدا کردم ولی مشکلات زیادی داشت و child هارو زیر هرکدوم چاپ نمیکرد یا استایل li و ul نمیداد و ....
ممنون میشم کمکم کنید .
تشکر

آفلاین
user-avatar
محمود ( 654 تجربه )
3 سال پیش

من با ووکامرس کار نکردم شاید این کدها به دردت بخوره
ارایه دسته بندی شامل id , parent_id , name
ساخت درخت
می تونی تابع ها رو در یک کلاس بنویسی و بعد فراخونی کنی.

    public function buildsTree( $data, $parent_id = 0)
    {
        $tree = array();
    foreach ($data as $d) {
        if ($d['parent_id'] == $parent_id) {

            $children = $this->buildTree($data, $d['id']);

            if (!empty($children)) {
                $d['_children'] = $children;

            }
            $tree[] = $d;

        }
    }
    return $tree;
    }

نمایش درخت

    public function printTree($tree)
    {
        echo '<ul>';
        foreach ($tree as $i => $t) {

            echo '<li>' .$t['name'].'</li>';

            if (isset($t['_children'])) {
                $this->printTree($t['_children']);
            }
        }
        echo '</ul>';
    }

فراخوانی

$cat = new Cat();//ساخت شی از  کلاس مورد نظر برای دسترسی یه متدها
        $allCat = 'آرایه  دسته یندی ها که می تونی از دیتابیس بگیری';
        $parent_id = 'آی دی مورد نظر که می خواهی فرزندانش رو نمایش بدی';
        $tree = $cat->buildsTree($allCat,$parent_id);

نمایش به صورت ul , li :

    <ul>
          <li>دسته بندی مورد نظر</li>
         <?php $cat->printTree($tree)?>
     </ul>

استایل ها

ul , li { list-style-type: none; margin-left: -25px; }
برای ارسال پاسخ باید وارد سایت شوید