8768 sujets

Développement web côté serveur, CMS

Bonsoir à tous !

Je tente de faire un menu dont le style (css) de chaque bouton dépendrait du fait que la page soit active ou non.
Je m'explique c'est peut-être pas super clair :

Je suis sur la page index. Mon menu a deux entrées : entree1 et entree2. Si je clique sur entree1 j'arrive à la page index.php?page=entree1. Jusque là ça va.
Sur la page index, les deux éléments de mon menu n'ont pas de style particulier (juste un lien quoi) Je voudrais que sur la page index.php?page=entree1, le bouton de entree1 ait une image de fond, pour marquer la page active. Comment faire ?

Mon bout de code :
<a href="index.php?page=entree1" class="active"><span>Entrée 1</span></a>
	 <a href="index.php?page=entree2"><span>Entrée 2</span></a>


Merci à vous, et merci aux supers tutos d'alsacréations Smiley smile
Merci Heyoan, malheureusement ce tuto ne répond pas entièrement à ma question : il dit de déclarer cette variable : $nav_en_cours = 'rubrique1'; sur chaque page php. Sauf que dans mon cas, tout se passe sur une même page... Comment faire ? Est-ce qu'il y a quelque chose que je n'ai pas compris ?
galenskap a écrit :
Comment faire ? Est-ce qu'il y a quelque chose que je n'ai pas compris ?
Ah ben non ! Il me semblait que le chapitre sur les sites dynamiques correspondait à ton contexte mais ça n'est pas le cas.

Donc voici une solution... parmi tant d'autres.

Comme entree1 et entree2 ne sont pas très parlants on va plutôt imaginer que 3 pages existent (accueil, mavie et monoeuvre) et que le contenu à inclure se trouve dans le répertoire include/pages/. Pour simplifier on va également supposer que le nom du fichier à inclure correspond à la valeur de page passée en paramètre et que l'extension est .inc.php (ce qui nous donne accueil.inc.php, mavie.inc.php et monoeuvre.inc.php).

Et enfin on décide que si page n'est pas renseigné dans l'url on affichera accueil par défaut et que si page ne correspond pas à l'une des 3 valeurs possibles on affichera également accueil (on pourrait aussi afficher une "erreur 404").

Ce qui donne :

index.php
<?php
// Initialisation ou récupération de $page ('accueil' par défaut)
$page = isset($_GET['page']) ? $_GET['page'] : 'accueil'; // au besoin voir  http://php.net/manual/fr/language.operators.comparison.php#language.operators.comparison.ternary
 

// pages existantes (clé / Libellé)
$pages = array(
	'accueil'	=> 'Accueil', 
	'mavie'		=> 'Ma vie', 
	'monoeuvre'	=> 'Mon oeuvre'
);

// si la valeur de page n'est pas l'une des clés du tableau on prend 'accueil' par défaut
if(!array_key_exists($page, $pages)) {
	$page = 'accueil';
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test onglet menu actif - <?php echo $pages[$page] ?></title>
<style type="text/css" media="screen">
/***********************************/
/*  Méthode des portes coulissantes  */
/**********************************/
#nav {
	list-style: none ;
	margin: 0 ;
	padding: 0 ;
	overflow: hidden ;		/* Création du contexte de formatage */
	}
#nav li {
	float: left ;
	width: 150px ;
	border: 1px solid #600 ;
	margin-right: 1px ;
	color: #fff ;
	background: #c00 ;
	}
#nav li a {
	display: block ;
	background: #900 url(http://www.alsacreations.com/xmedia/tuto/exemples/menunew/lienCoulissant.png) left top no-repeat ;
	color: #fff ;
	font: 1em "Trebuchet MS",Arial,sans-serif ;
	line-height: 1em ;
	padding: 4px 0 ;
	text-align: center ;
	text-decoration: none ;
	}
#nav li a:hover, #nav li a:focus, #nav li a:active, #nav li #en_cours {
	background: #033 url(http://www.alsacreations.com/xmedia/tuto/exemples/menunew/lienCoulissant.png) right top no-repeat ;
	text-decoration: underline ;
	}
</style>
<!--[if lt IE 7]>
<style type="text/css">
#nav {							/* Contexte de formatage pour IE6 */
	overflow: visible ;
	height: 1% ;
	}
</style>
<![endif]-->
</head>
<body>
<h1>Méthode des portes coulissantes</h1>
<ul id="nav">
<?php
// affichage des liens du menu
foreach($pages as $key => $value) {
	$en_cours = ($key == $page) ? ' id="en_cours"' : ''; // test page en cours
	echo "\t".'<li><a href="index.php?page='.$key.'"'.$en_cours.'>'.$value."</a></li>\n";
}
?>
</ul>
<div id="contenu">
<?php
include("include/pages/$page.inc.php");
?>
</div>
</body>
</html>
accueil.inc.php
<h2>Page accueil.inc.php</h2>
<p>Du texte...</p>
mavie.inc.php
<h2>Page mavie.inc.php</h2>
<p>Du texte...</p>
monoeuvre.inc.php
<h2>Page monoeuvre.inc.php</h2>
<p>Du texte...</p>
A noter que je me suis basé sur le tuto : Créer des menus simples en CSS.
Modifié par Heyoan (02 Nov 2009 - 23:04)