Représentation intervallaire : Affichage avec <ul> mais valide

Par Yan014, il y a 15 ans


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

Grafikart, il y a 15 ans

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

Yan014, il y a 15 ans

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>
Grafikart, il y a 15 ans

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, il y a 15 ans

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, il y a 15 ans

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

MrGuillou, il y a 15 ans

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

Yan014, il y a 15 ans

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
)
siriu, il y a 14 ans

Bonjour,

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

Grafikart, il y a 14 ans

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

Yan014, il y a 14 ans

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 ;)

siriu, il y a 14 ans

@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 ?

Grafikart, il y a 14 ans

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é :)

siriu, il y a 14 ans

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

siriu, il y a 14 ans

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