Menu dépliant reste déplié [Résolu]

jpthali 10 Messages postés mardi 30 août 2005Date d'inscription 19 janvier 2010 Dernière intervention - 14 janv. 2010 à 12:43 - Dernière réponse :  Mokondzi
- 4 janv. 2013 à 13:43
Salut à tous,

merci pour ce forum "hyper réactif".

J'utilise un script pour un menu déroulant qui fonctionne très bien, la page html appelle un fichier JS avec ce code dedans:

function afficheMenu(obj){

var idMenu = obj.id;
var idSousMenu = 'sous' + idMenu;
var sousMenu = document.getElementById(idSousMenu);

/*****************************************************/
/** on cache tous les sous-menus pour n'afficher **/
/** que celui dont le menu correspondant est cliqué **/
/** où 4 correspond au nombre de sous-menus **/
/*****************************************************/
for(var i = 1; i
Afficher la suite 

Votre réponse

14 réponses

Meilleure réponse
thalijp 19 Messages postés mardi 24 janvier 2006Date d'inscription 22 avril 2010 Dernière intervention - 19 janv. 2010 à 00:19
3
Merci
En fait j'ai fini par trouver une solution qui fonctionne très bien et qui me permet de garder le menu installé.
Dans chaque page ciblée par les sous menus, j'ai défini deux variables:
<?php $nav_ouvert = 'rubrique0'; ?>
<?php $nav_en_cours = 'rubrique1'; ?>


la première pour définir la position du menu, qui doit rester déplié et la seconde pour définir la classe qui correspond au sous menu dans un état "actif".

Ensuite dans le code html du menu luis même, j'ai appliqué les changements correspondants:


[# type de médias]


    
 id="sousmenu3">


[# longs métrages]



>
[nevil_story_accueilB.php publicités télévisées]



>
[nevil_story_accueilC.php publicités internet]


       



Si la page qui contient à la fois les deux variables s'ouvre, les deux actions correspondantes au menus et sous menu choisis sont appliquées, menu ouvert et sous menu en position "actif".

Merci PetoleTeam pour tes réponses en tout cas.

Merci thalijp 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de thalijp
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 16 janv. 2010 à 08:37
0
Merci
Bonjour,je présumes que ce script est commun à toutes les pages, aussi une façon, parmi d'autres,serait de jouer avec une variable et d'afficher le menu correspondant sur le onload du document.
var id_Active = "menu3";
window.onload = function(){
  afficheMenu( document.getElementById( id_Active));
}

l'id_Active étant bien sur différente d'une page à l'autre...

;O)
Commenter la réponse de PetoleTeam
thalijp 19 Messages postés mardi 24 janvier 2006Date d'inscription 22 avril 2010 Dernière intervention - 16 janv. 2010 à 14:53
0
Merci
salut,

merci pour cette réponse, mais si je comprends bien, il faut mettre ce code sur chaque page de destination ouverte par les sous-menus, pour indiquer "à la main" si le sous menu visité doit rester ouvert. Donc changer le code sur chaque page de destination.
J'aurais préférer en fait qu'un seul code définisse une fois pour toute l'action à effectuer pour chaque sous-menu cliqué, et ne pas être obligé de changer le code pour chaque page ouverte.
Je ne sais pas si c'est possible mais y a t-il une manière automatique de faire en sorte que le menu cliqué reste ouvert ?
Car en fait j'ai des occurences qui sont communes à plusieurs sous menus.
Ce qui fait que dans un cas "manuel" où il faut à chaque page dire si le menu est ouvert ou pas, pour certaines occurrences qui peuvent être trouvées en passant par 3 sous menus différents, je vais être obligés de créer à chaque fois 3 pages différentes indiquant sur chacune d'elle quel menu est ouvert, selon la manière dont le visiteur a appelé cette occurence.

Je ne sais pas si je suis très clair.

merci
Commenter la réponse de thalijp
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 17 janv. 2010 à 07:03
0
Merci
Bonjour,
Seul petit soucis, lorsqu'on clique sur un des liens de sous menu, après le chargement de la page liée, le menu revient en position fermée.
Cela signifie donc bien que le menu est déjà intégrer sur chaque page.

Ceci n'était qu'une façon de voir les choses
Tu peux utiliser les cookies
- stockage du cookies sur le click d'un lien qui t'indique la référence du menu cliquée
- passage de la référence du menu cliquée en paramètre de l'URL
- ou encore autre...

et à l'ouverture de la page
- récupération de la référence du menu cliquée et affichage de celui ci...

;O)
Commenter la réponse de PetoleTeam
thalijp 19 Messages postés mardi 24 janvier 2006Date d'inscription 22 avril 2010 Dernière intervention - 17 janv. 2010 à 13:18
0
Merci
salut,

je sais en gros quel principe il faut, le problème étant de l'appliquer. Comme je le dis plus haut j'ai cru comprendre qu'il faut utiliser une fonction du genre "php echo ($_SERVER["PHP_SELF"]" mais je rame pour l'utiliser.
Si tu pouvais m'éclairer sur cette méthode ou un des autres que tu proposes, ça serait merveilleux :)

merci
Commenter la réponse de thalijp
thalijp 19 Messages postés mardi 24 janvier 2006Date d'inscription 22 avril 2010 Dernière intervention - 18 janv. 2010 à 01:22
0
Merci
resalut,

en fait je complète un peu ma question.
La question sous-jacente de PetoleTeam m'a poussé à creuser un peu et finalement je vais inclure le menu via un include php sur chaque page, ce qui fait que ce code ne sera que sur une seule page, elle même appelée dans toutes les autres.

Sachant ça, est-ce qu'une solution plus simple existe permettant au menu de rester déplié une fois la page appelée chargée. J'imagine que ça doit être dans ce cas plus simple à gérer que dans le cas où le code du menu est dupliqué de pages en page et par conséquent rechargé à chaque fois.

Merci aux bonnes volontés qui pourront m'éclairer.
Commenter la réponse de thalijp
PetoleTeam 3435 Messages postés lundi 26 décembre 2005Date d'inscription 14 janvier 2011 Dernière intervention - 18 janv. 2010 à 18:27
0
Merci
Bonjour,
J'ai commis une source,c'est ici, CREATION AUTOMATIQUE SOMMAIRE, qui utilise window.location.href qui est en fait l'URL de la page en cours.
Le principe est tout proche...
Il te suffit de récupérer cette info et lors de la création de ton menu tester si le lien à afficher correspond et si OUI mettre son parent, le DIV "menux" donc, en display ="block"
;O)
Commenter la réponse de PetoleTeam
thalijp 19 Messages postés mardi 24 janvier 2006Date d'inscription 22 avril 2010 Dernière intervention - 18 janv. 2010 à 23:37
0
Merci
Salut,

merci pour ta réponse. En fait je ne vois pas du tout comment adapter ce code à mon cas.

Désolé.
Commenter la réponse de thalijp
cs_djcoyotte 5 Messages postés jeudi 6 novembre 2008Date d'inscription 3 mai 2010 Dernière intervention - 17 avril 2010 à 17:00
0
Merci
bonjour !
je suis dans le meme cas que toi et j'avoue je n'est pas bien compris comment tu as proceder...

Peut tu m'eclairer?

Merci d'avance !
Commenter la réponse de cs_djcoyotte
thalijp 19 Messages postés mardi 24 janvier 2006Date d'inscription 22 avril 2010 Dernière intervention - 18 avril 2010 à 21:20
0
Merci
salut,

En fait le principe est assez simple pour quelqu'un comme moi qui n'y connait rien en php.

Dans mon exemple, j'ai un menu dépliant contenant des sous menus qui renvoient à des pages html, qui elles mêmes contiennent:
-le contenu indiqué par les sous menu
-ainsi que le menu lui-même.

Par exemple:

Menu A
Sous menu 01
Sous menu 02

Menu B
Sous menu 03
Sous menu 04

Quand on clique sur Menu A, le sous menu apparait, et quand on clique sur "Sous menu 01", la page contenant ce qui est indiqué par sous-menu 01 apparait.
Comme ce sont des pages html, le menu entier est chargé dans chaque page html et donc revient à sa position d'origine, replié.

Le solution est donc d'abord de définir par l'intermédiaire des CSS 2 classes, une pour la position "sélectionné" du sous menu (quand on est sur la page visée, le sous menu reste surligné par exemple), et une classe pour la position non sélectionnée.

Ensuite le php entre en jeu et permet au menu, selon la page que l'on a chargée, de savoir d'une part quel menu doit rester déplié (on suppose qu'il y a plusieurs item menu, contenant chacun plusieurs sous menus) et d'autre part quel sous menu doit rester surligné pour montrer au visiteur dans quelle page il se trouve.

C'est assez simple à mettre en place, pour la première étape qui consiste à indiquer quelle partie du menu doit rester déplié, il faut insérer dans le code du menu ce code :
<?php if ($nav_ouvert == 'rubrique0') {echo ' style="display:block"';} else {echo ' style="display:none"';} ?>
, si il repère dans la page chargé l'élément 'rubrique0', il doit se déplier (display:block) sinon, il reste plié (display:none).

Pour lui montrer ça, il faut donc que dans la page qui est visée et pour laquelle il doit se déplier soit présent l'élément en question, il faut donc l'insérer dans la page cible sous la forme
<?php $nav_ouvert = 'rubrique0'; ?>


Pour info, les noms 'nav_ouvert' et 'rubrique0', sont à ton libre choix, tu peux écrire ce que tu veux à partir du moment que ce sont les mêmes mots qui sont utilisés dans le menu et dans la page cible.

Enfin, pour que le menu sache si un sous menu doit être surligné ou pas, c'est le même principe. Si un élément défini est présent dans la page cible, la classe "surligné" est active sinon, le sous menu reste non surligné.

Le code à insérer pour ce cas est celui ci par exemple
<?php if ($nav_en_cours == 'rubrique1') {echo ' class="sousmenuON"';} else {echo ' class="sousmenu"';} ?>

Si l'élément 'rubrique1' est présent dans la page cible, le sous menu est surligné, en utilisant la class CSS correspondante (ici, class="sousmenuON"), sinon, on laisse la class normale (ici class="sousmenu").

Voilà la principe, ça fonctionne parfaitement.

@+
Commenter la réponse de thalijp
cs_djcoyotte 5 Messages postés jeudi 6 novembre 2008Date d'inscription 3 mai 2010 Dernière intervention - 22 avril 2010 à 09:30
0
Merci
Merci beaucoup pour ta réponse thalijp et excuse moi du temps de réaction ^^!

Cependant après avoir relus ton post, j'ai remarqué que ton site est static... Le miens est dynamic !

Je m'explique :
J'ai une page principale : page.php, qui charge ma partie CONTENT avec un "include" :

<?php
if(empty($_GET['page'])){
include("accueil.php");
}
else {
$page = $_GET['page'];
include("$page.php");
}
?>


Ce qui se passe avec ta "technique ^^" c'est que mon menu n'arrive pas à récupérer la variable... Il me met une erreur du style :

Notice: Undefined variable: en_cours in C:\Program Files\EasyPHP-5.3.2\www\capemploi2\page.php on line 35
id="0">

J'ai pu lire sur plusieurs autre posts qui traite de ce problème qu'il faut passer par $_GET['page'] ... Mais la ca me parais TRES flou !

Si tu as des infos à ce sujet je suis preneur !
Merci beaucoup !
Commenter la réponse de cs_djcoyotte
thalijp 19 Messages postés mardi 24 janvier 2006Date d'inscription 22 avril 2010 Dernière intervention - 22 avril 2010 à 09:38
0
Merci
ha oui, en effet c'est un site statique.
J'avoue que je n'ai cherché une solution qu'à mon problème, n'y connaissant rien en php, je ne pourrai pas t'aider pour ton site dynamique.

Pose la question sur le forum en ouvrant un nouveau sujet, en général les participants sont très réactifs.

@+
Commenter la réponse de thalijp
cs_djcoyotte 5 Messages postés jeudi 6 novembre 2008Date d'inscription 3 mai 2010 Dernière intervention - 22 avril 2010 à 09:49
0
Merci
OK merci en tout cas !

Bonne continuation à toi !
Commenter la réponse de cs_djcoyotte
Commenter la réponse de Mokondzi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.