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

Nouveau WRInaute
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 :)
 
WRInaute accro
Re: Problème : Menu déroulant Js, session_destroy().

mikaelka a dit:
- 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.

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
 
Nouveau WRInaute
Re: Problème : Menu déroulant Js, session_destroy().

Bonjour,

mikaelka a dit:
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";
	}

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

mikaelka a dit:
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 ^^)
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.
 
WRInaute accro
Re: Problème : Menu déroulant Js, session_destroy().

mikaelka a dit:
Code:
	function deconnexion()
	{
		session_destroy();
		home();
		
	}//deconnexion

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.
 
Nouveau WRInaute
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 :

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.

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 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)

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 ;)
 
Nouveau WRInaute
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 :)
 
Nouveau WRInaute
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
 
Nouveau WRInaute
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?
 
WRInaute discret
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 ?
 
Nouveau WRInaute
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.
Code:
if (tondiv.style.display != 'none')

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 ;)
 
Nouveau WRInaute
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 ;)
 
Discussions similaires
Haut