Soucis de création de menu
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:
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
Code:
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;
} |
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...
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 :oops: