Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : problème de récursivité pour construire un menu [ Divers / Général ] (mickaelpfr)

vendredi 16 juin 2006 à 16:39:46 | problème de récursivité pour construire un menu

mickaelpfr

salut a tous après 2 jours complet je me décide a poster
je chercher a créer un menu qui aurait cette arborescence :

<div id="mainMenu1">
      <ul id="menuList1">
        <li><a href="dropdown-menu-en.html">Horizontal menu</a></li>
        <li>
          <a class="actuator" href="#">Products</a>
          <ul class="menu">

            <li>
              <a class="actuator" href="#">Phones</a>
              <ul class="menu">
                <li><a href="#">Samsung R225m</a></li>
                <li><a href="#">Nokia 3595</a></li>
                <li><a href="#">Samsung X105</a></li>
                <li><a href="#">Motorola V66</a></li>

              </ul>
            </li>
            <li><a href="#">Handhelds and PDAs</a></li>
            <li><a href="#">Internet Cards</a></li>
            <li><a href="#">Accessories</a></li>
          </ul>
        </li>

        
      </ul>
    </div>


qui permet donc d'avoir autant de sous menu ou menu ...

via une table php de type :

id ; idParent , titre , idPAge

id est l'id en autoincrément, idParent , id du parent , titre , titre du menu et idPage , corespond a l'id d'une autre table qui contient les info de la page ( url , contenu ... )

la je déprime j'arrive a afficher les menu et sous menu de façon illimité mais aps a construire mon menu en version html :(

code php  :

function rechercheEnfant($id,$monTableauParent,$niveau){
        //connexion a la bdd
include("config/config.php");
        require_once("classes/gestion_bdd.class.php");
        $gestionBdd = new gestion_bdd($serveur,$baseDeDonnee,$utilisateur,"");
        $gestionBdd->connexionBdd();
        //On va vérifier que le menu a des enfant
        $requeteRechercheEnfant = "SELECT * FROM menu WHERE `idParent` = ".$id;
        $resultatRechercheEnfant = $gestionBdd->executeRequete($requeteRechercheEnfant);
        $niveau++;
        $nomtableau = "tableau[]";
        while($row=MYSQL_FETCH_ARRAY($resultatRechercheEnfant, MYSQL_ASSOC)){
            $html .= "<li>";
                $nomtableau .= "[]";
                echo $nbelement.$row[titre]." niveau : $niveau - $nomtableau<br />\n";
                
                $html .= "<a class=\"actuator\" href=\"#\">$row[titre]</a>\n<ul class=\"menu\">";
                $monTableauParent = $row[titre];
                rechercheEnfant($row[id],$monTableauParent,$niveau);
            $html .= "</li>";
            
        }
    }

table menu :

CREATE TABLE `menu` (
  `id` int(11) NOT NULL auto_increment,
  `idParent` int(11) NOT NULL,
  `titre` varchar(200) NOT NULL,
  `idPage` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
)
INSERT INTO `menu` VALUES (1, 0, 'père', 0);
INSERT INTO `menu` VALUES (2, 1, 'fils', 0);
INSERT INTO `menu` VALUES (3, 2, 'pti fils 1', 13);
INSERT INTO `menu` VALUES (4, 2, 'pti fils 2', 13);
si qq peut me venir en aide

vendredi 16 juin 2006 à 17:32:43 | Re : problème de récursivité pour construire un menu

J_G

Salut,

C'est un problème classique. Tu ne l'as pas attrapé par le bon coté...
Je suis parti de ta fonction, en la modifiant petit à petit. Je te laisse voir comment ça se passe.


//connexion a la bdd
// on le fait une fois, ça va suffir (même les inclusion, un fois c'est bon)
include("config/config.php");
require_once("classes/gestion_bdd.class.php");
$gestionBdd = new gestion_bdd($serveur,$baseDeDonnee,$utilisateur,"");
$gestionBdd->connexionBdd();
        

// La fonction récursive
function creaMenu( $idparent=0 ) {
    global $gestionBdd; // on récupère le gestionnaire de BDD
    
    // On va chercher tous les liens qui ont comme parent : $idparent
    $requeteRechercheEnfant = "SELECT * FROM menu WHERE `idParent` = ".$idparent;
    $resultatRechercheEnfant = $gestionBdd->executeRequete($requeteRechercheEnfant);

    // Si aucun... on laisse tomber
    if( !mysql_num_rows($resultatRechercheEnfant) ) return;

    echo "<ul>"; // debut de la liste

    // pour chaque lien, un point dans la liste
    while( $row = mysql_fetch_assoc($resultatRechercheEnfant) ) {
        echo "<li>"; // debut de l'item
        // le lien
        echo "<a class=\"actuator\" href=\"#\">{$row['titre']}</a>\n";

        // puis on va chercher les sous liens de celui ci
        // soit ceux qui ont comme parent le présent! C'est la récursion
        creaMenu( $row['id'] ); // Envoi directe à l'affichage la liste des liens enfants

        echo "</li>"; // fin de l'item
    }

    echo "</ul>" // fin de la liste
}


// Puis pour envoyer le menu :
creaMenu(); // On commence à idparent=0, donc à la racine !




Voilà, cela te plait-il ?



Cette discussion est classé dans : menu, titre, id, row, niveau


Répondre à ce message

Sujets en rapport avec ce message

Requete SQL dans un array pour Smarty [ par nzangel ] Bonjour,J'essais de me mettre au PHP et à Smarty mais voila mon problème.Pour mon menu j'ai fait une requête SQL :$sql = mysql_query ('SELECT titre,li Problème affichage conditionnel d'une requête sql [ par xxiv ] Bonjour à tous,Je vous expose ce qui devrais se passer.Les personnes inscrites peuvent choisir que leur nom et prénom apparaissent ou non.Mais si ils un menu dynamique [ par ikramta ] salut tout le monde. depuis quelques jour je suis entrain de selectionner de ma base les diferents titre contenu qui sont enfin des sous menu.mo but e Listing 1 seul enregistrement [ par christuckers ] Amis CSistes, bien le bonjour.....J'ai posé une question hier après midi, par rapport à la fonction INNER JOIN, qui n'est apparament pas disponible su php et base de données [ par lsamsoumal ] bonjour j'ai un code qui récupére un tableau d'une base de données. dans ce tableau je veux avoir 3 liens vers des pages internet:mauritanie,infoclima requete mysql select where [ par kevin77230 ] BonjourVoila je vous expose mon probleme.j'ai un script qui permet de faire apparaitre les information d'une table de ma base de donneecode:<pre class UDAPTE fonctionnel sur easy php en local mais pas en ligne [ par mnyloko ] Hello à tous  J'ai un petit problème d'UPDATE sur un site admin qui gère des articles ( Catalogue ) Ceux-ci marchent très bien en local mais lorsque j Menu récursif en php et MySQL [ par paguira ] Je cherche un algorithme pour créer un menu  récursif du type :    Titre 1    Titre 2                    Titre 3            Titr php sql [ par kelm_by ] salut tous le monde je ne sais pas ouest l'erreur dans ce code??????????,merci d'avance$result = mysql_query("SELECT * FROM table ORDER BY n ASC LIMIT aide phpmyadmin [ par Nicorad ] Bonjour à tous,Je suis en train de faire un petit site pour un groupe de musique et je rencontre quelques problème.En fait je voudrai afficher des tit


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.