IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Soucis de création de menu


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut 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 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

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

  2. #2
    Membre régulier Avatar de Lost In Translation
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 166
    Points : 89
    Points
    89
    Par défaut
    Et bien, rien que le fait d'avoir détaillé ici les étapes qu'il faudrait que je fasse m'a éclairci la route...

    Je viens de finir et le résultat marche.

    Voici donc le code final

    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
     
    public function createHtmlMenu($langue, DB $DB)
      {
        //je récupere mon arborescence
        $arbo = $this->getArborescenceMenu($langue, $DB);
     
        $i = 0;
        while($i < count($arbo[0]))
        {
          //j'entame le html
          $this->arborescenceFinale = '<ul id="nav">'."\n";  
          //je recupere les infos de la rubrique de type x-0-0
          $rub = $DB->getInfosRubrique($arbo[0][$i]);
          //j'écris les infos
          $this->arborescenceFinale .= '<li><a href="'.$rub['cible'].'">'.$rub['titrerubrique'].'</a>'."\n";
     
          //je verifie s'il a un enfant ou pas
          if($DB->getNbreEnfants($i+1) <= 0) //il n'y a pas d'enfant
            $this->arborescenceFinale .= '</li>'."\n".'</ul>'."\n";//c'est un onglet seul
          else
          {//il y a des enfants...
            //je continue mon html
            $this->arborescenceFinale .= '<ul>'."\n";
     
            $j = 0;
            while($j < count($arbo[1]))
            {
              //je regarde si arbo[0][$i] est parent avec arbo[1][$j]
              $srub = $DB->getInfosRubrique($arbo[1][$j]);
              if ($this->isParent($rub['numerorubrique'],$srub['numerorubrique']))
              {//ils sont parents 
                //j'écris mon html
                $this->arborescenceFinale .= '<li><a href="'.$srub['cible'].'">'.$srub['titrerubrique'].'</a>'."\n";
                //je verifie si $arbo[1][$j] a des enfants
                if($DB->getNbreEnfants($i+1,$j+1) <= 0)//il n'y a pas d'enfants
                  $this->arborescence .= '</li>'."\n";
                else
                {//il y a des enfants
                  //je continue mon html
                  $this->arborescenceFinale .='<ul>'."\n";
     
                  $k = 0;
                  while($k < count($arbo[2]))
                  {
                    $ssrub = $DB->getInfosRubrique($arbo[2][$k]);
                    //je regarde si arbo[1][$j] est Subparent avec arbo[2][$k]
                    if($this->isSubParent($srub['numerorubrique'],$ssrub['numerorubrique']))
                    {//ils sont parents
                      //j'écris mon html
                      $this->arborescenceFinale .= '<li><a href="'.$ssrub['cible'].'">'.$ssrub['titrerubrique'].'</a></li>'."\n";
                    }
     
                    $k++;
                  }
                  $this->arborescenceFinale .= '</ul>'."\n";
                }              
              } 
              $j++;
            }
          $this->arborescenceFinale .= '</ul>'."\n";
          }
          $this->arborescenceFinale .='</ul>'."\n";
          $i++;
        }   
        return $this->arborescenceFinale;
      }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6] Soucis avec Création de label dynamique
    Par Lucas42 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/06/2006, 18h55
  2. Soucis de création de requêtes sql
    Par Zebeber dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 26/05/2006, 11h13
  3. Création de menu
    Par madness dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/05/2006, 23h38
  4. [C#] Pb de création de menu dynamiques
    Par albireo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/12/2005, 16h49
  5. [dvd] création de menu
    Par FFF dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 06/08/2005, 09h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo