Bonjour à tous,
J'utilise un bout de code qui m'affiche un menu comme ceci:
Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 <ul> <li>Montagne</li> <li> <ul> <li>Ski</li> <li>Surf</li> <li>Rando</li> </ul> </li> <li>Tennis</li> <li> <ul> <li>Chaussures</li> <li>Raquettes</li> <li>Sacs</li> </ul> </li> </ul>
Ce menu est affiché à partir d'un array qui a cette structure:
Le code qui affiche le menu:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 Array ( [0] => Array ( [category_parent_id] => 0 [category_child_id] => 1 [category_id] => 1 [vendor_id] => 1 [category_name] => Montagne [category_description] => [category_thumb_image] => [category_full_image] => bf3a94d09cb29bddaa13839d184e1c5e.jpg [category_publish] => Y [cdate] => 1182523310 [mdate] => 1199471607 [category_browsepage] => browse_1 [products_per_row] => 1 [category_flypage] => shop.flypage [list_order] => 16 ) [1] => Array ( [category_parent_id] => 0 [category_child_id] => 2 [category_id] => 2 [vendor_id] => 1 [category_name] => Sports de raquettes [category_description] => [category_thumb_image] => 1e9f38247fc2d98c7a95d02aed200485.gif [category_full_image] => [category_publish] => Y [cdate] => 1182523344 [mdate] => 1203965763 [category_browsepage] => browse_1 [products_per_row] => 1 [category_flypage] => shop.flypage [list_order] => 2 ) [2] => Array ( [category_parent_id] => 1 [category_child_id] => 3 [category_id] => 3 [vendor_id] => 1 [category_name] => Cycles [category_description] => [category_thumb_image] => 1e9f38247fc2d98c7a95d02aed200485.gif [category_full_image] => [category_publish] => Y [cdate] => 1182523355 [mdate] => 1188212355 [category_browsepage] => browse_1 [products_per_row] => 1 [category_flypage] => shop.flypage [list_order] => 3 ) [3] => Array ( [category_parent_id] => 1 [category_child_id] => 4 [category_id] => 4 [vendor_id] => 1 [category_name] => Sports collectifs [category_description] => [category_thumb_image] => 1e9f38247fc2d98c7a95d02aed200485.gif [category_full_image] => [category_publish] => Y [cdate] => 1182523369 [mdate] => 1188212362 [category_browsepage] => browse_1 [products_per_row] => 1 [category_flypage] => shop.flypage [list_order] => 9 )
ça marche très bien pour un menu à 2 niveaux: parent + enfant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 echo "<ul>"; for ($i = 0; $i <count($rows); $i++) { //si l'élément est de premier niveau, on l'affiche directement comme élément de liste if ($rows[$i]["category_parent_id"] == 0) { echo "<li style='margin-top: 30px;'>"; echo $rows[$i]["category_parent_id"] . " <a href='#'>" . $rows[$i]["category_name"] . "</a>"; //on cherche directement tous les enfants pour cet élément foreach($rows as $val) { //on initialise une variable pour savoir si on en est au 1er enfant ou pas $deb = false; if($val["category_parent_id"] == $rows[$i]["category_id"] && $val["category_name"] != $rows[$i]["category_name"]) //si l'élément est un enfant du parent en cours { if(!$deb) { //si il s agit du 1er enfant $deb = true; //on met la variable a true, pour n entrer qu une fois dans cette boucle echo "<ul >"; //on affiche ul pour le décalage } echo "<li>"; echo $val["category_parent_id"] . " <a href='#'>" . $val["category_name"] . "</a>"; //on affiche le nom de l enfant echo "</li>"; } if($deb) echo "</ul>"; //si il y avait des enfants on ferme le <ul> de décalage } echo "</li>"; } } echo "</ul>";
Mon problème: comment faire si chaque enfant peut avoir des enfants et ainsi de suite?
On m'a parlé de mettre de la récursivité sur une partie du code mais j'ai du mal a voir comment faire ça.
Merci pour toute indication qui pourrait me faire avancer.
Partager