[Résolu] Problème : Menu déroulant Js, session_destroy().

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par mikaelka, 30 Décembre 2007.

  1. mikaelka
    mikaelka Nouveau WRInaute
    Inscrit:
    24 Décembre 2007
    Messages:
    30
    J'aime reçus:
    0
    Bonjour,
    je solicite votre aide pour des problème que j'ai sur un projet de php, j'ai deux problèmes persistants.

    1 - Le premier est que j'ai un menu sorte de menu déroulant :

    Code:
    function appear (elem_id)
    {
    	var elem = document.getElementById (elem_id);
    	if (elem.style.display == "none"){
    		elem.style.display = "block";
    	}
    	else{
    		elem.style.display = "none";
    	}
    
    }
    J'ai deux soucis sur celui-ci :

    - Le premier est que il faut cliquer deux fois lors de "la première fois" pour que le menu se déroule mais après un clic suffit pour ouvrir ou fermer.
    - Le deuxième soucis je voudrais faire en sorte de prendre en charge l'état dans lequel étais le menu à la page précédente si l'utilisateur clique sur un lien.



    2 - J'ai un autre problème qui n'a rien avoir (ou presque) concernant le session_close() :

    Code:
    	function deconnexion()
    	{
    		session_destroy();
    		home();
    		
    	}//deconnexion
    Ce code déconnecte un utilisateur en tuant toutes les variables de session de l'utilisateur (normal.. enfin je pense ^^) mais il faut que je clique deux fois pour que mes variables de session n'existe plus... Voici le test que j'effectue pour afficher ou non la connexion :

    Code:
    if (! isset ($_SESSION['AUTHENTIFICATION'])){
    //traitement
    }else{
    //traitement
    }
    NOTE : J'utilise un serveur ORACLE.

    En vous remerciant d'avance, j'espère avoir été assez conçis dans mes explications :)
     
  2. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 231
    J'aime reçus:
    1
    Re: Problème : Menu déroulant Js, session_destroy().

    est tu certain qu'a l'affichage initial de la page (avant de cliquer 2 fois) elem_id a un style display comme il faux ? *

    pour passer l'état du menu d'une page a l'autre, une variable de session serait pratique. (voir un champ hidden dans la page aussi)

    une url serait pas mal aussi pour pouvoir 'voir le problème'

    * edit -> si l'élément est pas a none au départ, le premier clic va le passer a none (donc le menu n'appariait pas) le second clic va l'ouvrir
     
  3. cmpc2002
    cmpc2002 Nouveau WRInaute
    Inscrit:
    19 Mai 2006
    Messages:
    26
    J'aime reçus:
    0
    Re: Problème : Menu déroulant Js, session_destroy().

    Bonjour,

    Pour que cela fonctionne, tu doit déclarer ton élément comme ça :
    Code:
    <div id="element" style="display=none;">blablabla</div>
    Ainsi, il est en display none et quand tu cliquera, il s'affichera
    invercément, si il doit être visible, tu le déclare comme ça :
    Code:
    <div id="element" style="display=block;">blablabla</div>
    Normalement, cela devrait fonctionner.

    Içi, avant le session_destroy(); , il faut faire aussi, un $_SESSION = array();
    Ainsi, tu est certain que la session sera complètement détruite.

    Cordialement.
     
  4. zeb
    zeb WRInaute accro
    Inscrit:
    5 Décembre 2004
    Messages:
    12 231
    J'aime reçus:
    1
    Re: Problème : Menu déroulant Js, session_destroy().

    faudrais voir ce que fait la fonction home() car si elle affiche une page X ou Y sans renvoyer le header de la page, la session ne sera pas détruite (car tu sera toujours dans ta page de destruction de session.
     
  5. mikaelka
    mikaelka Nouveau WRInaute
    Inscrit:
    24 Décembre 2007
    Messages:
    30
    J'aime reçus:
    0
    Merci a vous deux vous vous complétez très bien ;)

    zeb >> J'appel bien le rafraichissement entier de la page le problème ne venait pas de la.

    cmpc2002 >> C'est bien de là que venait mon problème de session :

    Pour ce qui est du Js le problème venait du fait que je déclarer pas le style dans la page mais dans le css et donc il ne le prenait pas en compte.


    Errata
    :
    Code:
    <div id="element" style="display=none;">blablabla</div>
    doit être pris comme
    Code:
    <div id="element" style="display : none;">blablabla</div>
    (Si d'autre personne sont intéressé par ce sujet ;))


    zeb >>
    Pour le JS, j'avais bien initialisé le display et merci pour la solution a l'état au changement de page je n'avais pas pensé au champ hidden pour cette utilisation ;)
    Je vous tiens au courant pour ceux que sa intéressent. :)

    Merci à tous ;)
     
  6. mikaelka
    mikaelka Nouveau WRInaute
    Inscrit:
    24 Décembre 2007
    Messages:
    30
    J'aime reçus:
    0
    Je relance ce topic puisque je rencontre a nouveau un problème.

    Le javascript n'étant pas trop mon truc j'ai décider de bidouiller une fonction qui récupère l'état du display de mon sous-menu à afficher et qui le renvoie :

    Code:
    function getStatus(elem_id)
    {
    	var elem = document.getElementById (elem_id);
    	return elem.style.display;
    }
    à l'utilisation sa donne sa pour tester si l'élément étais a block à la page précédente alors on affiche display : block; sinon none :

    Code:
    echo <<< END
      <div id="menu">
    	<img height="100" width="100" src="../Upload/logomini.png" onclick="../Php/phototeque.php?EX=home"/>
        <ul>
    		<li><a href="../Php/phototeque.php?EX=home">home</a></li>
    		<li><a href="#" onclick="appear('categories')">Themes</a></li>
    		<script language="javascript">
    		if (getStatus('categories') == "none"){
    			document.write('<div id = "categories" style="display : none;">');
    		}else{
    			document.write('<div id = "categories" style="display : block;">');
    		}	
    		</script>
    		
    		<li><a class = "categorie" href="../Php/phototeque.php?EX=vignettes">themes</a></li>
    		<li><a class = "sous-categorie" href="../Php/phototeque.php?EX=Avion">sous-theme</a></li>
    		<li><a class = "sous-categorie" href="../Php/phototeque.php?EX=Avion">sous-theme</a></li>
    		<li><a class = "categorie" href="../Php/phototeque.php?EX=Avion">themes</a></li>
    		</div>
    		
    END;
    Voilà enfin c'est plus une vision idéaliste de mon bout de code que la réalitée puisque sa ne marche pas ^^.
    Merci encore :)
     
  7. cmpc2002
    cmpc2002 Nouveau WRInaute
    Inscrit:
    19 Mai 2006
    Messages:
    26
    J'aime reçus:
    0
    re,

    Je ne pense pas qu'il soit possible de récupérrer l'état de la variable pour une page visitée précédement de cette façon;

    Parcontre, en javascript, on peut créer et lire des cookies.

    A mon avis, dans ta fonction qui permet d'afficher ou cacher le code, tu devrait créer un cookies dans le quel tu socque l'état de ton bloc.

    Parcontre, je ne peut pas t'aider pour les cookies javascript, je n'ai jamais utilisé cela.

    [edit :j'ai trouvé cette page qui m'as l'air de bien expliquer le fonctionnement des cookies javascript -http://www.actulab.com/les-cookies-en-javascript.php
     
  8. mikaelka
    mikaelka Nouveau WRInaute
    Inscrit:
    24 Décembre 2007
    Messages:
    30
    J'aime reçus:
    0
    ok merci cmpc je vais me documenté sur le sujet ;)

    Est-ce que le code que j'injecte dans le html est correcte si jamais a la place de getStatus j'initialise une variable? est-ce qu'il me mettra dans le flux la div avec le display qui me convient?
     
  9. Elvis
    Elvis WRInaute discret
    Inscrit:
    20 Mai 2005
    Messages:
    109
    J'aime reçus:
    0
    avec document.write tu vas effectivement écrire quelque chose dans ta page, mais à mon avis tu devrais plutôt te pencher sur les notions de "noeuds"...

    Sinon
    Pour savoir si un div ou un noeud existe, un simple
    Code:
    if (document.getElementById('mondiv')) 
    
    suffit je pense.

    Pour savoir si ton div est ouvert, tu peux tester la propriété offsetHeight qui retourne la hauteur en pixels de ton block. C'est peut-être pas LA solution mais ça marche.

    Sinon, tu peux tester la valeur de style.display :
    Code:
    // Si le calque n'est pas fermé
    if (tondiv.style.display != 'none')
    

    A en voir ton code, il semble que le menu soit généré par une page php ?

    Si c'est le cas, pourquoi ne pas faire une fonction qui génère tout ton menu dynamiquement ?
     
  10. mikaelka
    mikaelka Nouveau WRInaute
    Inscrit:
    24 Décembre 2007
    Messages:
    30
    J'aime reçus:
    0
    Tout d'abord merci pour ta réponse ;)

    Tous le reste du site est en dynamique ou virtuel MVC oblige ;) mais le menu restera fixe, enfin toute une partie est quand même dynamique puisque générée en fonction de l'utilisateur ^^. Mais mon problème été plus javascript.
    Je fait déjà ce test en passant par la fonction GetStatus() :
    Code:
    function getStatus(elem_id)
    {
       var elem = document.getElementById (elem_id);
       return elem.style.display;
    }
    Je n'ai peut être pas bien saisi le principe de la solution que tu me propose mais se que je veut c'est juste savoir à quel état était le display de ma div à la page précédente...

    Merci ;)
     
  11. mikaelka
    mikaelka Nouveau WRInaute
    Inscrit:
    24 Décembre 2007
    Messages:
    30
    J'aime reçus:
    0
    Voilà je vais poster la solution bon sa fait un moment que j'avais fais cette demande et que j'ai trouvé la solution mais je n'ai pas eu le temps de venir la mettre :)

    Code:
    echo'<li><a href=# onclick="appear('categorie')">Themes</a></li>';
    if (isset($_REQUEST['menu_block'])){
    
    	if($_REQUEST['menu_block'] == "true")
    		echo('<div id="categorie" style="display : block">');
    	else echo('<div id="categorie" style="display : none">');
    
    }
    else echo('<div id="categorie" style="display : none">');
    
    
    On appel donc la fonction Js appear qui prend en argument l'id de la div à faire apparaitre ou disparaitre. Elle stoque dans un cookie nommé menu_block un booléen qui permet de savoir si à la page précédente le menu était déroulé ou non.

    Code:
    function appear(elem_id)
    {
    	var elem = document.getElementById (elem_id);
    	if (elem.style.display == "none"){
    		elem.style.display = "block";
    		ecrire_cookie("menu_block", "true");
    	}
    	else{
    		elem.style.display = "none";
    		ecrire_cookie("menu_block", "false");
    	}
    	
    
    }
    
    ecrire_cookie est une fonction disponible sur le net qui permet d'écrire dans un cookie vous pouvez la trouver à cette adresse :
    http://www.conseil-creation.com/informatique/internet/cookies.php


    Voilà maintenant vous pouvez dérouler le menu et changer de page sans que son état ne change seul un second clic le fera disparaitre.

    Cette fonction est assez simpliste mais peut surement intéresser des personnes qui se sont posé les mêmes questions.

    Merci à ceux qui m'avais aider ;)
     
Chargement...
Similar Threads - [Résolu] Problème Menu Forum Date
Problème images en https (forum phpbb) [résolu] Développement d'un site Web ou d'une appli mobile 18 Novembre 2017
[RESOLU] probleme d'indexation des pages en httpS Crawl et indexation Google, sitemaps 20 Mars 2012
[Résolu] Problème d'importation de base MySQL en UTF8 chez 1&1 Administration d'un site Web 3 Juillet 2011
[Résolu] Problème pour gérer 2 campagnes AdWords 17 Novembre 2010
[RESOLU] Probleme d'erreur 302 non voulue Développement d'un site Web ou d'une appli mobile 30 Mai 2010
[Résolu] Problème de remonté de stats de campagne mails via GA Google Analytics 13 Mai 2010
[RESOLU]probleme lors de l'update des informations Développement d'un site Web ou d'une appli mobile 7 Avril 2010
[RESOLU] probleme de tri descendant de tableau ... Développement d'un site Web ou d'une appli mobile 4 Avril 2010
[résolu] Problème sur certains navigateurs ? Développement d'un site Web ou d'une appli mobile 16 Octobre 2009
probleme area="poly" et placement de div [RESOLU] Développement d'un site Web ou d'une appli mobile 8 Octobre 2009
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice