Bonjour

vu que grafikart à crée un tuto l'a dessus, j'en profite pour poser ma question, sait on jamais ^^

J'essaie d'afficher mes catégories à l'aide des <ul> <li> en html mais pas moyen de la rendre valide w3c. Je sais pourquoi mon code généré n'est pas valide mais je n'arrive pas à modifier l'algo pour que ce soit ok *_*

Si quelqu'un a une idée, voici le bout de code :

$levelPrevious = 0;
    $html = "<ul>";
        foreach ($arrayCat As $pc) {
            if ($levelPrevious < $pc->level) {
                $html .= str_repeat('<ul>', $pc->level - $levelPrevious);
                $levelPrevious = $pc->level;
                $html .= "<li> {$pc->get_tf('name')}</li>";
            } elseif ($levelPrevious > $pc->level) {
                $html .= str_repeat('</ul>', ++$levelPrevious - $pc->level);
                $levelPrevious = $pc->level;
                $html .= "<ul><li>{$pc->get_tf('name')} </li>";
            } else {
                $html .= "<li> {$pc->get_tf('name')} </li>";
            }
        }
        $html .= '</ul>';

Merci d'avance et bonne aprem :)

14 réponses


on peut voir le code généré ?

Yan014
Auteur

Bien sur :)

<ul>
        <li> 1 </li>
        <ul>
                <li> 1.1</li>
                <ul>
                        <li> 1.1.1</li>
                        <ul>
                                <li> 1.1.1.1</li>
                                <ul>
                                        <li> 1.1.1.1.1</li>
                                        <ul>
                                                <li> 1.1.1.1.1.1</li>
                                                <ul>
                                                        <li> 1.1.1.1.1.1.1</li>
                                                        <li> 1.1.1.1.1.1.2 </li>
                                                        <li> 1.1.1.1.1.1.3 </li>
                                                </ul>
                                        </ul>
                                        <ul>
                                                <li>1.1.1.1.1.2 </li>
                                                <li> 1.1.1.1.1.3 </li>
                                        </ul>
                                </ul>
                                <ul>
                                        <li>1.1.1.1.2 </li>
                                        <li> 1.1.1.1.3 </li>
                                </ul>
                        </ul>
                </ul>
                <ul>
                        <li>1.1.2 </li>
                </ul>
        </ul>
        <ul>
                <li>1.2 </li>
                <li> 1.3 </li>
                <li> 1.4 </li>
                <ul>
                        <li> 1.4.1</li>
                        <li> 1.4.2 </li>
                </ul>
        </ul>
</ul>
<ul>
        <li>2 </li>
</ul>

Ok ça marche mais effectivement ul>ul n'est pas valide, il faut insérer le ul dans un nouveau li

<ul>
      <li> 1 </li>
      <li> <ul>.......</ul> </li>  
</ul>
Yan014
Auteur

Oui je sais pourquoi elle n'est pas valide c'est juste que je n'arrive pas à modifier l'algo pour qu'il génère le bon html, je m'y prend peut être pas de la bonne façon x)

Yan014
Auteur

Un petit up au cas ou quelqu'un saurait m'aider ^^

si tu pouvais nous passer ton tableau pour que l'on puissent faire des tests, merci

Yan014
Auteur

Voici mes données actuelle :

Array
(
    [id] => 1
    [name] => Computer Sience
    [left] => 1
    [right] => 38
    [level] => 0
)
Array
(
    [id] => 2
    [name] => Computer
    [left] => 2
    [right] => 27
    [level] => 1
)
Array
(
    [id] => 3
    [name] => Ordinateur fixe
    [left] => 3
    [right] => 24
    [level] => 2
)
Array
(
    [id] => 4
    [name] => 1.1.1.1
    [left] => 4
    [right] => 23
    [level] => 3
)
Array
(
    [id] => 5
    [name] => 1.1.1.1.1
    [left] => 5
    [right] => 18
    [level] => 4
)
Array
(
    [id] => 6
    [name] => 1.1.1.1.1.1
    [left] => 6
    [right] => 13
    [level] => 5
)
Array
(
    [id] => 7
    [name] => 1.1.1.1.1.1.1
    [left] => 7
    [right] => 8
    [level] => 6
)
Array
(
    [id] => 8
    [name] => 1.1.1.1.1.1.2
    [left] => 9
    [right] => 10
    [level] => 6
)
Array
(
    [id] => 9
    [name] => 1.1.1.1.1.1.3
    [left] => 11
    [right] => 12
    [level] => 6
)
Array
(
    [id] => 10
    [name] => 1.1.1.1.1.2
    [left] => 14
    [right] => 15
    [level] => 5
)
Array
(
    [id] => 11
    [name] => 1.1.1.1.1.3
    [left] => 16
    [right] => 17
    [level] => 5
)
Array
(
    [id] => 12
    [name] => 1.1.1.1.2
    [left] => 19
    [right] => 20
    [level] => 4
)
Array
(
    [id] => 13
    [name] => 1.1.1.1.3
    [left] => 21
    [right] => 22
    [level] => 4
)
Array
(
    [id] => 14
    [name] => Ordinateur portable
    [left] => 25
    [right] => 26
    [level] => 2
)
Array
(
    [id] => 15
    [name] => Réseaux
    [left] => 28
    [right] => 29
    [level] => 1
)
Array
(
    [id] => 17
    [name] => Stockage
    [left] => 30
    [right] => 35
    [level] => 1
)
Array
(
    [id] => 18
    [name] => Disque dur interne
    [left] => 31
    [right] => 32
    [level] => 2
)
Array
(
    [id] => 19
    [name] => Disque dur externe
    [left] => 33
    [right] => 34
    [level] => 2
)
Array
(
    [id] => 16
    [name] => Conssomable
    [left] => 36
    [right] => 37
    [level] => 1
)

Bonjour,

As tu trouvé la solution à ton problème ?

Il faut utiliser la récursivité pour avoir un tableau bien organisé pour ensuite écrire l'HTML simplement

Yan014
Auteur

Bonjour,

non je n'ai pas trouvé de solution à mon soucis.

Utilisez la récursivité serait quand même "idiot" vu que une des force de cette méthode est de justement ne pas utiliser la récursivité pour obtenir ce que l'on veut ;)

@grafikart --> la récursivité en se basant sur les champs left et right ? Ce n'est vraiment pas facile, aurais tu sous la main un exemple ?

La récursivité se fait au niveau PHP au lieu de MySQL avec cette méthode (d'où le gain), de plus vu que les données sont organisé par left DESC c'est très simple de produire un tableau organisé :)

Oki bien compris, merci à toi, je vais tacher de parvenir au résultat souhaité :)

Je n'arrives malheureusement pas à produire le tableau organisé :(