Menu dépliant reste déplié

Résolu
jpthali Messages postés 10 Date d'inscription mardi 30 août 2005 Statut Membre Dernière intervention 19 janvier 2010 - 14 janv. 2010 à 12:43
 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

14 réponses

thalijp Messages postés 19 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 22 avril 2010
19 janv. 2010 à 00:19
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.
3
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
16 janv. 2010 à 08:37
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)
0
thalijp Messages postés 19 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 22 avril 2010
16 janv. 2010 à 14:53
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
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
17 janv. 2010 à 07:03
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)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
thalijp Messages postés 19 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 22 avril 2010
17 janv. 2010 à 13:18
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
0
thalijp Messages postés 19 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 22 avril 2010
18 janv. 2010 à 01:22
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.
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 17
18 janv. 2010 à 18:27
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)
0
thalijp Messages postés 19 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 22 avril 2010
18 janv. 2010 à 23:37
Salut,

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

Désolé.
0
cs_djcoyotte Messages postés 5 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 3 mai 2010
17 avril 2010 à 17:00
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 !
0
thalijp Messages postés 19 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 22 avril 2010
18 avril 2010 à 21:20
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.

@+
0
cs_djcoyotte Messages postés 5 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 3 mai 2010
22 avril 2010 à 09:30
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 !
0
thalijp Messages postés 19 Date d'inscription mardi 24 janvier 2006 Statut Membre Dernière intervention 22 avril 2010
22 avril 2010 à 09:38
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.

@+
0
cs_djcoyotte Messages postés 5 Date d'inscription jeudi 6 novembre 2008 Statut Membre Dernière intervention 3 mai 2010
22 avril 2010 à 09:49
OK merci en tout cas !

Bonne continuation à toi !
0
0
Rejoignez-nous