[RESOLU] Menu arborescent avec fonction récursive

Petit nouveau ! | 4 Messages

25 mai 2016, 21:56

Bonsoir,

Mon menu utilise bootstrap avec une fonction récursive et donc les sous menu ne s'affiche pas. Voici donc ma fonction récursive
<?php

function generate_menu($parent)
{
    $has_childs = false;
    $html = "";
 
    global $menuItems;
    global $parentMenuIds;
                         
    foreach($menuItems as $key => $value)
    {
        if ($value['id_parent'] == $parent)
        {   
            if ($has_childs === false)
            {
                $has_childs = true;
                if($parent != 0)
                {
                    $html .= '<ul class="dropdown-menu">';
                }
            }
                                 
            if($value['id_parent'] == 0 && in_array($value['id'], $parentMenuIds))
            {
                $html .= '<li class="dropdown"><a class="dropdown-toggle" href="#">' . $value['name'] . '</a>';
            }
            else if($value['id_parent'] != 0 && in_array($value['id'], $parentMenuIds))
            {
                $html .= '<li class="dropdown-submenu"><a href="#">' . $value['name'] . '</a>';
            }
            else
            {
                $html .= '<li><a href="#">' . $value['name'] . '</a>';
            }
                 
            generate_menu($value['id']);
                                 
            $html .= '</li>';
        }
    }
         
    if ($has_childs === true) $html .= '</ul>';
                         
    return $html;
}

?>
J'ai donc fait un print_r de mon $value de mon foreach et voici mon tableau

Code : Tout sélectionner

Array ( [id] => 1 [id_parent] => 0 [name] => Accueil [tip] => [position] => 1 [active] => 1 ) Array ( [id] => 2 [id_parent] => 0 [name] => Hebergement [tip] => [position] => 1 [active] => 1 ) Array ( [id] => 3 [id_parent] => 2 [name] => Pack light [tip] => tip [position] => 1 [active] => 1 ) Array ( [id] => 4 [id_parent] => 2 [name] => Pack emeraude [tip] => tip-dark [position] => 2 [active] => 1 ) Array ( [id] => 5 [id_parent] => 2 [name] => Pack rubis [tip] => [position] => 3 [active] => 1 ) Array ( [id] => 6 [id_parent] => 0 [name] => Script PHP [tip] => [position] => 1 [active] => 1 ) Array ( [id] => 7 [id_parent] => 6 [name] => Radio shoucast [tip] => [position] => 1 [active] => 1 ) Array ( [id] => 8 [id_parent] => 7 [name] => Support technique [tip] => [position] => 1 [active] => 1 ) Array ( [id] => 9 [id_parent] => 8 [name] => Acheter ce script [tip] => [position] => 1 [active] => 1 )
Mon code html généré devrais ressembler a ceci
<li>
    <a class="dropdown-toggle" href="#">Accueil</a>
</li>
 
<li class="dropdown">
    <a class="dropdown-toggle" href="#">
    Hébergement
    </a>
    <ul class="dropdown-menu">
        <a href="#">Pack light</a>
        <a href="#">Pack emeraude</a>
        <a href="#">Pack rubis</a>
    </ul>
</li>
 
<li class="dropdown">
    <a class="dropdown-toggle" href="#">Script PHP</a>
                                                 
    <ul class="dropdown-menu">
        <li class="dropdown-submenu">
            <a href="#">Radio shoucast</a>
            <ul class="dropdown-menu">
                <li class="dropdown-submenu">
                    <a href="#">Support technique</a>
                    <ul class="dropdown-menu">
                        <li><a href="index-classic.html">Acheter ce script</a></li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</li>
Et donc ma fonction récursive me renvoie ceci sans les sous menus
<li>
        <a href="#">Accueil</a>
    </li>
     
    <li class="dropdown">
        <a class="dropdown-toggle" href="#">Hebergement</a>
    </li>
     
    <li class="dropdown">
        <a class="dropdown-toggle" href="#">Script PHP</a>
    </li>
Merci pour vos futurs réponses, en ésperant m'avoir bien expliquer sur mon problème.

Cordialement
Modifié en dernier par staff76620 le 26 mai 2016, 01:03, modifié 1 fois.

Avatar du membre
Mammouth du PHP | 1609 Messages

26 mai 2016, 00:25

Bonsoir. Et bien ta fonction generate_menu termine par un return $html; et quand tu l'appelles dans le foreach tu fais juste un generate_menu($value['id']); tu ne fais donc rien du retour de cet appel. Tu pourrais déjà essayer d'ajouter un $html.= devant cet appel. Tu verras après si ça fait le job comme il faut. :)
Développeur web depuis + de 20 ans

Petit nouveau ! | 4 Messages

26 mai 2016, 01:03

Merci beaucoup pour ton aide effectivement j'ai oublier le $html .= devant generate_menu($menuItem['id']); Cela fonctionne a présent comme je le voulais ;)