Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Général Conception Web
Général Conception Web Forum d'entraide sur les choix technologiques. Avant de poster : Cours Dév. Web, FAQs Dév. Web, Sources Dév. Web
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2011, 21h46   #1
Membre à l'essai
 
Homme
Inscription : juin 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2011
Messages : 44
Points : 22
Points : 22
Par défaut Façon la plus optimisée de gérer un menu

Bonsoir,

je cherche une méthode pas trop barbare pour gérer un menu dont la rubrique active est mise en avant par rapport au paramètre passé en GET.

Exemple nous sommes la rubrique B d'un site donc je veux qu'elle soit en gras et soulignée par exemple:

rubriqueA rubriqueB rubriqueC.

Pour l'instant j'ai ma façon barbare :

Code :
1
2
3
<a href="<?php echo LINK.'/index.php?obj=rubriqueA'; ?>"><div class="<?php if ($_GET['obj']=="rubriqueA"){echo "underlineClass";}?>">rubrique1</div></a>
<a href="<?php echo LINK.'/index.php?obj=rubriqueB'; ?>"><div class="<?php if ($_GET['obj']=="rubriqueB"){echo "underlineClass";}?>">rubrique2</div></a>
<a href="<?php echo LINK.'/index.php?obj=rubriqueC'; ?>"><div class="<?php if ($_GET['obj']=="rubriqueC"){echo "underlineClass";}?>">rubrique3</div></a>
et dans l'exemple, on a

et dans le css, on a

Code :
.underlineClass{text-decoration:underline;}
je suis sûr qu'il existe des façons bien plus optimisées de gérer la chose, et j'en appelle à votre savoir svp. Car j'ai du mal à trouver quelque chose qui me convienne.

Je voudrais éviter d'avoir à faire 3 conditions if (3 ici mais dans mon menu, j'en ai plus, et j'ai un sous-menu..

Merci
estmars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 01h24   #2
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

On peut utiliser un tableau comme ceci...
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$menu  =array();
$menu[]=array('obj'=>'rubriqueA','txt'=>'Rubrique 1');
$menu[]=array('obj'=>'rubriqueB','txt'=>'Rubrique 2');
$menu[]=array('obj'=>'rubriqueC','txt'=>'Rubrique 3');
 
$obj=isset($_GET['obj'])?$_GET['obj']:'';
 
// Filtrer cette variable par mesure de sécurité avant de rentrer dans la boucle
 
foreach($menu as $item){
	$html='<a href="'.LINK.'/index.php?obj='.$item['obj'].'">';
	if($item['obj']==$obj)$html.='<div class="underlineClass">';else $html.='<div>';
	$html.=$item['txt']."</div></a>\n";
	echo $html;	
}
ou comme cela...
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$menu=array(
	'rubriqueA'=>'Rubrique 1',
	'rubriqueB'=>'Rubrique 2',
	'rubriqueC'=>'Rubrique 3'
);
 
$obj=isset($_GET['obj'])?$_GET['obj']:'';
 
// Filtrer cette variable par mesure de sécurité avant de rentrer dans la boucle
 
foreach($menu as $key=>$txt){
	$html='<a href="'.LINK.'/index.php?obj='.$key.'">';
	if($key==$obj)$html.='<div class="underlineClass">';else $html.='<div>';
	$html.=$txt."</div></a>\n";
	echo $html;	
}

Pour la prise en compte des sous-menus, on pourrait avoir un tableau comme ceci...
Code php :
1
2
3
4
$menu  =array();
$menu[]=array('obj'=>'rubriqueA','txt'=>'Rubrique 1','smenu'=>null);
$menu[]=array('obj'=>'rubriqueB','txt'=>'Rubrique 2','smenu'=>null);
$menu[]=array('obj'=>'rubriqueC','txt'=>'Rubrique 3','smenu'=>array('srubrique1'=>'Sous-Rubrique'));
ou comme cela...
Code php :
1
2
3
4
5
$menu=array(
	'rubriqueA'=>'Rubrique 1','smenu'=>null,
	'rubriqueB'=>'Rubrique 2','smenu'=>null,
	'rubriqueC'=>'Rubrique 3','smenu'=>array('srubrique1'=>'Sous-Rubrique')
);
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 12/09/2011, 09h37   #3
Membre à l'essai
 
Homme
Inscription : juin 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2011
Messages : 44
Points : 22
Points : 22
Merci Eric ! Je prends c'est ce que je voulais.
Ti ringraziu !
estmars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 11h27   #4
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
Bonjour,
je complèterai le code d'Eric en disant : "liste non-ordonnée <ul><li>" :
(en enlevant les div et en sortant le code html du code php)
Code php :
1
2
3
4
5
6
7
<ul id="menu_nav1">
<?php	foreach($menu as $key=>$txt) { ?>
	<li<?php echo ($key==$obj)? ' class="underlineClass">' : ''; ?>>
		<a href="<?php echo LINK.'/index.php?obj='.$key; ?>"><?php echo $txt; ?></a>
	</li>
<?php	} ?>
</ul>
Avec sous-menu ?
Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ul id="menu_nav1">
<?php	foreach($menu as $key=>$txt) { ?>
	<li<?php echo ($key==$obj)? ' class="underlineClass">' : ''; ?>>
		<a href="<?php echo LINK.'/index.php?obj='.$key; ?>"><?php echo $txt; ?></a>
		<!-- sous-menu ? -->
<?php		if($menu[$key]['ssmenu']!=NULL) { ?>
			<ul class="menu_nav2">
<?php			foreach($ssmenu as $sskey=>$sstxt) { ?>
				<li<?php echo ($sskey==$obj)? ' class="underlineClass">' : ''; ?>>
					<a href="<?php echo LINK.'/index.php?obj='.$sskey; ?>"><?php echo $sstxt; ?></a>
				</li>
<?php			} ?>
			</ul>
<?php		} ?>
	</li>
<?php	} ?>
</ul>

-> A lire : Des menus déroulants grâce aux CSS
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 15h51   #5
Membre à l'essai
 
Homme
Inscription : juin 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2011
Messages : 44
Points : 22
Points : 22
Merci jreaux62 !

Simple question, quand tu fais à la ligne 3 de ton premier code :

Code :
<li<?php echo ($key==$obj)? ' class="underlineClass">' : ''; ?>>
j'ai jamais vu le echo écrit avant la condition, ça fait en fait exactement la même chose que :

Code :
<li<?php ($key==$obj)?  echo 'class="underlineClass">' :  echo''; ?>>
?

Merci !
estmars est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 17h29   #6
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
-> L'instruction if : voir ces exemples
Code php :
<?php echo ($key==$obj)? ' class="underlineClass">' : ''; ?>
est équivalent à :
Code php :
<?php if($key==$obj){ echo ' class="underlineClass">'; } else { echo ''; } ?>
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/09/2011, 00h04   #7
Membre à l'essai
 
Homme
Inscription : juin 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : juin 2011
Messages : 44
Points : 22
Points : 22
Merci ! J'aurais pas pensé faire une simple recherche sur php.net.

Parfois j'apprends avec du retard de nouvelles subtilités dans les conditions les plus usitées.
estmars est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h46.


 
 
 
 
Partenaires

Hébergement Web