Bonjour à tous,
Je travaille sur la création d'un CMS multilingue pour une société (j'y suis stagiaire). Je butte actuellement sur une question de menu.
Les rubriques composants les menus sont enregistrés dans ma BDD (mysql).
Le menu que je dois créer est un menu déroulant sur 3étages :
ONGLET => menu déroulant 1 au passage sur l'onglet => menu déroulant 2 sur certains liens du déroulant 1.
Ainsi dans ma bdd, j'ai pour une rubrique parents trois attributs pour gérer ceci :
1) ordre, qui est un INT qui va me dire la position
2) Parent, c'est l'identifiant de la rubrique parente
3) arborescence, de la forme x-y-z (où x,y et z sont des chiffres)
Imaginons que Mon premier onglet ait un déroulant 1 à 3 lien et que le lien numéro 2 ait un déroulant à 2 liens, cela se noterait ainsi :
Onglet (1-0-0 signifie onglet 1)
|--> rubrique 1 (notée 1-1-0, elle est fille de l'onglet 1 (premier chiffre) et placée en position 1 (2e chiffre)
|--> rubrique 2 (notée 1-2-0)
|------> sous rubrique 1 (notée 1-2-1)
|------> sous rubrique 2 (notée 1-2-2)
|--> rubrique 3 (notée 1-3-0)
|
onglet 2 (noté 2-0-0)
....
Pour gérer ceci, je suis en train de faire une classe php5...
J'ai donc une fonction qui me trie mes rubriques dans trois tableaux :
- onglet si de la forme x-0-0
- menu si de la forme x-y-0
- sous menu si de la forme x-y-z
J'ai une deuxieme fonction qui détermine si deux rubriques sont parentes...
Et ensuite, je calle...
Voici à peu près sur quoi je voudrais tomber en html :
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 <ul id="nav"> <li><a href="#">Rubrique 1-0-0</a> <ul> <li><a href="rubrique">Rubrique 1-1-0</a></li> <li><a href="fghjk">Rubrique 1-2-0</a> <ul> <li><a href="fghj">Rubrique 1-2-1</a></li> <li><a href="dfghj">Rubrique 1-2-2</a></li> </ul> </li> <li><a href="fghjk">Rubrique 1-3-0</a></li> </ul> </li> </ul>
Et voici les fonctions de ma classe menu.class.php
Et à partir de là, je suis bloqué... deux jours que j'essaye de faire quelques trucs... mais non, j'n'y arrive pas. Je ne sais plus quoi faire de ces bouts de code...
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 class Menu { //variables de la classe //public //protected //private private $onglet = array(); //tableau contenant tous les onglets private $menu = array(); //tableau contenant tous les menus private $sousmenu = array();//tableau contenant tous les sousmenus private $arborescence = array(); //tableau contenant les tableaux ci dessus private $arborescenceFinale = array(); //tableau à trois dimension contenant le menu final //constructeur //Methodes de récupération private function getArborescenceMenu($langue, DB $DB) { //je récupère l'id de la langue $idlangue = $DB->getidLangue($langue); //je récupère toutes les rubriques où ismenu = 1 et qui sont disponible dans ma langue $sql = $DB->exec_sql("SELECT * FROM rubrique,existe_dans WHERE ismenu = 1 AND langue_idlangue='{$idlangue}' AND rubrique_idrubrique = idrubrique ORDER BY ordre ASC"); //je trie mes langues : en trois tableau : onglet / menu / sous menu while($ligne = mysql_fetch_array($sql)) { $e = explode('-',$ligne['numerorubrique']); if($e[0] > 0 && $e[1] == 0 && $e[2] == 0) $this->onglet[] = $ligne['idrubrique']; elseif($e[0] > 0 && $e[1] > 0 && $e[2] == 0) $this->menu[] = $ligne['idrubrique']; else $this->sousmenu[] = $ligne['idrubrique']; } mysql_free_result($sql); //je construis un tableau arborescant $this->arborescence[] = $this->onglet; $this->arborescence[] = $this->menu; $this->arborescence[] = $this->sousmenu; return $this->arborescence; } private function isParent($rub1, $rub2, DB $DB) { $r1 = $DB->getInfosRubrique($rub1); $r2 = $DB->getInfosRubrique($rub2); $e1 = explode('-',$r1['numerorubrique']); $e2 = explode('-',$r2['numerorubrique']); if($e1[0]==$e2[0]) return true; else return false; } private function isSubParent($rub1,$rub2, $DB) { $r1 = $DB->getInfosRubrique($rub1); $r2 = $DB->getInfosRubrique($rub2); $e1 = explode('-',$r1['numerorubrique']); $e2 = explode('-',$r2['numerorubrique']); if($e1[0]==$e2[0] && $e1[1]==$e2[1]) return true; else return false; }
Si quelqu'un a une solution. Je sais que je vais devoir faire quelque chose de récurssif... mais je ne sais pas quoi.
Je voyais un truc du genre
tant que j'ai des onglets dans mon tableau d'onglet
1) je verifie si menu[0] est parent de onglet[0]
2) si oui, j'écris mon bout de html (ou je le stock)
3) sinon, je passe à menu[1]
4) si menu[1] est parent de onglet[1], j'écris
5) je verifie si sousmenu[0] est parent de menu[1]
6) si oui, j'écris
7) sinon je passe à sousmenu[1]....
8) et je passe ensuite à onglet[1]
Mais, voilà, n'est-ce pas trop lourd niveau exécution ? N'y a-t-il pas plus simple ?
Merci de vos aides... ceic est mon premier post sur ce forum ^^ désolé si je ne respecte pas certaines règles![]()
Partager