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

PHP & Base de donn�es Discussion :

[PostGreSQL] menu dynamique php-postgre-css [PostgreSQL]


Sujet :

PHP & Base de donn�es

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Par d�faut [PostGreSQL] menu dynamique php-postgre-css
    Bonjour a tous, debutant en php, c'est un cours que je recois a l'ecole...

    j'ai un projet a faire pour fin decembre. j'ai decid� de "refaire" un ebay. toute facon c'est a titre priv�.

    Venons-en au fait, je voudrais faire un joli menu vertical dynamique qui contiendra les categories et lorsqu'on clique, les sous categories.

    ma base de donn�e est en postgreSql, j'utilise des styles css.

    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
    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
    <?php session_start();?>
    <head>
    <title>Menu vertical</title>
    <link rel="stylesheet" href="./style.css" />
     
    <script type="text/javascript">
    <!--
    window.onload=montre;
    function montre(id) 
    {
    	var d = document.getElementById(id);
    		for (var i = 1; i<=10; i++) 
    		{
    			if (document.getElementById('smenu'+i)) 
    			{
    				document.getElementById('smenu'+i).style.display='none';
    			}
    		}
    	if (d) 
    	{
    		d.style.display='block';
    	}
    }
    //-->
    </script>
    </head>
     
    <body>
     
    <dl id="menu">
    <?php 		
    	include ('connect.php');
    	$queryparent = "select * from projet.categorie where id_categorie = id_categorie_parent";
    	$resultparent = pg_exec($cnx,$queryparent);
    	if(!$resultparent)
    	{
    		echo("Echec de la requete: $queryparent");
    		exit();
    	}
    	else
    	{
    		$i=0;
    		while($listeparent = @pg_fetch_array($resultparent,$i++))
    		{
    			echo("<dt onClick=\"javascript:montre('smenu$listeparent[id_categorie]');\">$listeparent[nom]</dt>");
    			$queryenfant = "select * from projet.categorie where id_categorie_parent = $listeparent[id_categorie] AND id_categorie <> id_categorie_parent";
    			$resultenfant = pg_exec($cnx,$queryenfant);
    			if(!$resultenfant)
    			{
    				echo("Echec de la requete: $queryenfant");
    				exit();
    			}
    			else
    			{
    				echo("");
    				echo("<dd id=\"smenu+$i\">
    				<ul>
    				");
    				$j=0;
    				while($listeenfant = @pg_fetch_array($resultenfant,$j++))
    				{
    					echo("<li><a href=\"tagada.html\">$listeenfant[nom]</a></li>
    					");
    				}
    				echo("</ul>
    				</dd>
    				");
    			}
    		}
    	}
    	?>
    </dl>
     
    </body>
    </html>
    ma feuille de style :
    <style type="text/css">
    <!--
    body {
    margin: 0;
    padding: 0;
    background: white;
    font: 80% verdana, arial, sans-serif;
    }
    dl, dt, dd, ul, li {
    margin: 0;
    padding: 0;
    list-style-type: none;
    }
    #menu {
    position: absolute;
    top: 0;
    left: 0;
    }
    dl#menu {
    width: 15em;
    }
    dl#menu dt {
    cursor: pointer;
    margin: 2px 0;;
    height: 20px;
    line-height: 20px;
    text-align: center;
    font-weight: bold;
    border: 1px solid gray;
    background: #ccc;
    }
    dl#menu dd {
    border: 1px solid gray;
    }
    dl#menu li {
    text-align: center;
    background: #fff;
    }
    dl#menu li a, dl#menu dt a {
    color: #000;
    text-decoration: none;
    display: block;
    border: 0 none;
    height: 100%;
    }

    dl#menu li a:hover, dl#menu dt a:hover {
    background: #eee;
    }

    #mentions {
    font-family: verdana, arial, sans-serif;
    position: absolute;
    bottom : 205px;
    left : 421px;
    color: #000;
    background-color: #ddd;
    }
    #mentions a {text-decoration: none;
    color: #222;
    }
    #mentions a:hover{text-decoration: underline;
    }

    -->
    </style>
    mon probleme :

    mon menu est "ouvert" des l'ouverture de la page alors qu'il faudrait cliquer sur la categorie principale pour que ca s'ouvre... je comprends pas pourquoi ca fait ca!
    Je pense que le code est assez simple, et ca fonctionne lorsqu'il n'y a pas de php dedans! donc c'est bien moi qui ai mis le souc mais je ne trouve pas comment
    Je peux poster un screenshot du resultat si c'est n�cessaire.

    Un grand merci d'avance

  2. #2
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Par d�faut
    personne???????

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    D�tails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par d�faut
    Il faut que tes sous-menus soient en 'display:none' � l'ouverture de la page. A la rigueur, tu peux faire un javascript affectant ce style � tous les sous-menus lors de l'�v�nement onLoad.
    Mais le mieux � mon avis est la solution suivante :
    1) Tu r�cup�res toutes les donn�es concernant les menus en une seule requ�te, et tu les stoque dans une variable. Au passage, cela va t'�conomiser un bon nombre de requ�tes.
    2) Tu affectes tout le code html du menu dans une variable. A chaque nouvel id, tu affectes la variable contenant les css avec :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    $css.='#ton_id {display:none;}'
    3) Tu affiches ensuite ta variable css dans le <head>, et ton menu � la bonne place.
    Cela t'�vite d'afficher puis de cacher tous les sous-menus au chargement de la page, ce qui visulellement est beaucoup plus agr�able.

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Par d�faut
    Meci beaucoup pour ta reponse,

    Je suis tres debutant dans tout ca, j'apprends seulement a l'ecole... j'ai �t� repiquer un code gratuit sur le net et modifi� a ma guise avec le php.

    Ceci voulant dire que tu viens de me parler en russe avec ce que tu me proposes de faire!

    Je n'attends aucunement qu'on le fasse a ma place, par contre si t'as un p'tit exemple sous la main, ce serait super

    En attandant, je cherche toujours, j'ai vu que tu me disais que je devais appliquer 'display:none' a l'ouverture, mais c'est ce que j'ai fait il me semble!
    a l'ouverture :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    window.onLoad=montre; // j'appelle la fonction sans identifiant
    dans la fonction montre :
    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
    function montre(id) 
    { 
       var d = document.getElementById(id); 
          for (var i = 1; i<=10; i++)
          { 
             if (document.getElementById('smenu'+i)) 
             { 
                document.getElementById('smenu'+i).style.display='none'; //tout est "refermé" dans cette boucle
             } 
          } 
       if (d) // si j'ai envoyé un sous menu
       { 
          d.style.display='block'; // je l'affiche
       } 
    }
    On sait deboguer du javascript???

    Si oui, avec quel outil? comme ca je pourrais voir qu'est-ce qu'il envoi reellement dans cette fonction!

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Par d�faut
    C'est bon, on laisse tomber :trouve:

    admirez l'erreur de M****

    J'adore le PHP car il a pas besoin de mettre des petits "+" dans les chaines pour dire qu'on met une variable...

    Je suis un javateur moi

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    echo("<dd id=\"smenu+$i\">
    C'est mieux comme ceci

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    echo("<dd id=\"smenu$i\">
    autrement dit, lors de la verification dans la fonction, pour le premier sous menu par exemple, j'envoyait smenu+1 au lieu de smenu1
    de votre aide et a bientot surement

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 278
    D�tails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 278
    Par d�faut
    Citation Envoy� par tyrann
    En attandant, je cherche toujours, j'ai vu que tu me disais que je devais appliquer 'display:none' a l'ouverture, mais c'est ce que j'ai fait il me semble!
    a l'ouverture :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    window.onLoad=montre; // j'appelle la fonction sans identifiant
    On sait deboguer du javascript???

    Si oui, avec quel outil? comme ca je pourrais voir qu'est-ce qu'il envoi reellement dans cette fonction!
    Tu dois appeller une fonction de la fa�on suivante :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    nom_fonction(arg1, arg2...);
    S'il n'y a pas d'argument, tu dois quand m�me indiquer les parenth�ses (c'est la seule fa�on pour javascript de diff�rencier une fonction d'une variable).
    Tu dois donc �crire :
    Ensuite, je te conseille de mettre l'�v�nement onLoad dans le body :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    <body onload="montre();">
    Citation Envoy� par tyrann
    On sait deboguer du javascript???

    Si oui, avec quel outil? comme ca je pourrais voir qu'est-ce qu'il envoi reellement dans cette fonction!
    Js est tr�s dur � d�bugger. Mais tu peux utiliser la console javascript de Firefox, et le d�bugger javascript du m�me Firefox. Ce sont 2 extensions gratuites � t�l�charger. Bref, si tu n'as pas encore FireFox, tu sais ce qu'il te reste � faire

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 70
    Par d�faut
    merci merci, mais ca fonctionne tres bien comme ca tu sais!!!

    je vais t'ouver que j'ai plus envie de chipoter

    por firefox... bien sur que j'utilise ca! pourquoi faire compliqu� quand on sait faire simple

    core merci, je vais aller chercher apres les extensions... @++

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [DOM] menu dynamique php mysql javascript
    Par maxland dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 15/03/2009, 14h02
  2. Menu dynamique PHP/MySQL
    Par okoweb dans le forum Langage
    R�ponses: 12
    Dernier message: 07/03/2009, 08h46
  3. [MySQL] Menu dynamique PHP / MySQL CSS
    Par mouchagheb dans le forum PHP & Base de donn�es
    R�ponses: 2
    Dernier message: 18/06/2008, 11h33
  4. [PHP-JS] Menu dynamique PHP
    Par gtony dans le forum Langage
    R�ponses: 7
    Dernier message: 07/10/2007, 17h22
  5. Menu dynamique PHP
    Par JamesP dans le forum Langage
    R�ponses: 4
    Dernier message: 16/06/2006, 12h25

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