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 :

Menu dynamique cliquable avec fonction récursive


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Menu dynamique cliquable avec fonction récursive
    Bonjour,

    Je n'arrive pas à me sortir d'un problème.

    Le but : monter un menu à arborescence cliquable à l'aide d'une fonction récursive sachant que les données du menu sont stockées en base.

    Plus précisément, je souhaite dans un premier temps n'afficher que le premier niveau du menu. Quand je clique sur un lien, les liens du second niveau s'affichent. Quand je clique sur un lien du second niveau, les liens du troisième niveau s'affichent et ainsi de suite. Bien sûr, en cliquant sur un lien ouvert, celui-ci se referme, cachant les sous-menus lui correspondant.

    J'espère que j'ai été clair...

    La récursive fonctionne. Mes menus et sous-menus apparaissent bien mais ils sont tous ouverts et non cliquables. Mon problème c'est que je n'arrive pas à intégrer le Javascript me permettant de cacher, d'ouvrir et de fermer cette arborescence.

    Voici mon 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
    $recherche=0;
     
    function recur($pere,$rang,$conn) // $conn est la connexion à la bdd
    {
    	if($conn)						
    	{						
    		$sql = "select STRUC_LIBELLE, NIVEAU_NUM, 
    		decode(NIVEAU_CODE, 'DIR', '0','POLE', LIBELLE_D, 'SERV', LIBELLE_P,'CELL', LIBELLE_S, 'STRUCTU', LIBELLE_C, '-1') PARENT from STRUCTURE_HIERARCHIE2 where NIVEAU_NUM=".$rang;
     
    		$stid = oci_parse($conn, $sql);
     
    		$resultat=oci_execute($stid);
    		$nblignes=oci_num_fields($stid);
     
    		if($nblignes > 0)//	si il y a au moins 1 resultat
    		{
    			while( $ligne=oci_fetch_array($stid, OCI_ASSOC) )//	tant qu'il y a des lignes on affiche les enfants
    			{
    				$parent=$ligne["PARENT"];
    				$enfant=$ligne["STRUC_LIBELLE"];
     
    				if ($parent==$pere) {
    					echo espace($rang),"<font color='blue'><b>".$enfant."</b></font><BR />";
    					recur($enfant,$rang+2,$conn);
    				}
    			}
    		}			
    	}
    	else
    	{
    		echo"Erreur de connexion";
        }		
    }	
     
    recur($recherche,2,$conn);

    Voilà. Les tests que j'ai faits pour intégrer le Javascript ne fonctionnent pas. Le problème vient de la récursive car le Javascript que j'utilise habituellement pour faire ce genre de menu contient des DIV qui s'imbriquent. Or avec la récursive, je ne vois pas du tout comment imbriquer ces DIV.

    Qu'en pensez-vous ? Est-ce que j'essaye de faire quelque chose d'impossible ?

    Merci.

    Arnaud

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 888
    Points : 6 632
    Points
    6 632
    Par défaut
    Bonjour,

    Si ton menu s'affiche correctement alors le problème ne peut se situer qu'entre le code HTML généré et le Javascript. Mais le code PHP n'y est pour rien.

    Pour que l'on puisse te répondre, il faudrait que tu montres le code HTML généré et la partie Javascript qui gère ce menu.

  3. #3
    Membre actif Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Points : 223
    Points
    223
    Par défaut
    CosmoKnacki a raison...

    Tous ce qu'on peut voir c'est que t'envoi des requêtes sql dans une foncton récursive et ca c'est mal.

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2006
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Pour ce qui est de la requête dans la récursive, je plaide coupable pour l'utilisation mais pas pour la création. Comme je ne savais pas comment m'y prendre, j'ai récupéré ce code sur un site et je l'ai adapté à mon cas. Mais la requête était déjà dans la récursive dans le code d'origine. Et je ne savais pas que c'était "mal".

    Mais bon ça fonctionne et c'est l'essentiel... même s'il n'est que statique pour l'instant.

    En ce qui concerne le Javascript, il n'apparaît pas car, ne sachant pas comment le mettre dans mon code, je ne l'ai pas mis. Je sais faire des menus dynamiques en Javascript. Ils fonctionnent très bien. Mon problème là c'est que je ne sais pas où le mettre ce Javascript. C'est dans ce sens que va ma demande : quelle est la logique pour intégrer le Javascript dans une récursive ?

    Pour être un peu plus précis, quand je fais des menus dynamiques sans récursive et que j'ai divers sous-menus, les appels aux fonctions Javascript s'imbriquent de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    début du premier menu
        début du premier sous-menu niveau 1
            debut du second sous-menu niveau 1
            fin du second sous-menu niveau 1
       fin du premier sous-menu niveau 1
       début du second sous-menu niveau 2
       fin du second sous-menu niveau 2
    fin du premier menu
    Mais là, avec une récursive, comment les faire imbriquer sachant qu'on ne connaît pas à l'avance le nombre de sous-menus ?

    Arnaud

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 50
    Points : 47
    Points
    47
    Par défaut
    Bonsoir,

    Je te conseil d'utiliser JQuery pour la réalisation de ton javascript.
    Il permet d'affecter facilement une action à un clic sur un élément HTML, ses éléments parents ou fils et de savoir quel élément déclenche l'action : http://api.jquery.com/category/selectors/

    Et utiliser les effets hide et show pour afficher/masquer vos éléments : http://api.jquery.com/category/effects/basics/

    @+
    Nico

Discussions similaires

  1. Réponses: 7
    Dernier message: 12/06/2011, 07h14
  2. Afficher du XML dans une table HTML avec fonction récursive (ou pas)
    Par iviewclear dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 19/04/2010, 17h04
  3. [Turbo Pascal] Problème avec fonction récursive
    Par Kikokimo dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 14/11/2009, 05h40
  4. Menu dynamique javascript avec frame
    Par cosycorner dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 07/02/2007, 14h53
  5. Menu dynamique : PB avec IE 7
    Par homer2 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/12/2006, 11h33

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