Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
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 15/03/2011, 18h51   #1
Membre régulier
 
Avatar de kéraunos
 
Homme
Inscription : janvier 2005
Messages : 157
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2005
Messages : 157
Points : 71
Points : 71
Par défaut Inclure des menus avec "id=current"

Bonjour à tous.

Savez-vous comment inclure, sur n'importe quelle page d'un site web, toute la partie correspondant aux menus (mettons, un bandeau supérieur, comme sur ce forum) tout en générant un bout de HTML (id="current") en attribut de la balise <LI> qui contient le lien de la page active ?

En clair: j'ai un menu assez conséquent et qui revient sur chaque page de mon site. Je veux utiliser include() pour me simplifier la vie dès que je dois rajouter/supprimer un item de ce menu. Sa structure HTML est une banale <UL> avec des <LI> pour les liens.
En plus de cela, je veux un style CSS particulier pour le lien qui correspond à la page active, du style :

Code :
1
2
3
4
5
6
7
 
<ul id="menu">
    <li><a href="page1.php">Item 1</a></li>
    <li id="current"><a href="page2.php">Item 2</a></li>
    <li><a href="page3.php">Item 3</a></li>
    ...
</ul>
Est-ce possible avec include() ?
Si non, connaissez-vous un moyen de réaliser cela en PHP ?

Merci de votre attention.
kéraunos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 19h40   #2
Invité régulier
 
Inscription : décembre 2009
Messages : 8
Détails du profil
Informations forums :
Inscription : décembre 2009
Messages : 8
Points : 7
Points : 7
Bonjour,

il n'y a pas (à ma connaissance) de méthode particulière en PHP pour faire cela.
ça dépend surtout de comment tu as organisé ton code.

On peut par exemple récupérer l'adresse appelée avec un
Code :
$current = basename($_SERVER['PHP_SELF']);
puis comparer celle ci sur chaque <li> avec le lien à mettre en évidence.
Comme ceci :

Code :
1
2
3
 
<li <?php if($current == "index.php") echo "id='current'; ?>><a href='index.php'>Home</a>
...
Bien sûr il faudra peut être traiter un peu cette adresse avant comparaison ..


Un collègue au boulot utilise une autre méthode en testant la correspondance avec un regex
Code :
1
2
3
4
5
6
7
8
 
$menu = file_get_contents("fichier_menu.php);
 
$current = basename($_SERVER['PHP_SELF']);
 
$menu = preg_replace("<li><a href='".$current.'">(.*)</a></li>, <li id='current'><a href='".$current.'">(.*)</a></li>, $menu);
 
echo $menu;
Mais je préfère la première ...

Avec ça tu devrait pouvoir t'en sortir, mais il faudra faire quelques tests pour adapter tes URL.

PS : Fais gaffe si tu prends la 2ème solution, j'ai tapé le regex à l'arrache pour l'exemple (je suis nul en expression régulière ).

A bientôt...
mastache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 19h47   #3
Membre Expert
 
Inscription : septembre 2010
Messages : 1 240
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 240
Points : 1 562
Points : 1 562
Citation:
Envoyé par kéraunos Voir le message
Est-ce possible avec include() ?
Bien sûr
__________________
- Réalisations
- Interface graphique : génération en javascript d'objets défilants, texte et/ou images, mode horizontal ou vertical.
ABCIWEB est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2011, 22h47   #4
Membre régulier
 
Avatar de kéraunos
 
Homme
Inscription : janvier 2005
Messages : 157
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : janvier 2005
Messages : 157
Points : 71
Points : 71
Hey, merci à vous deux, ça fonctionne très bien.

Au cas où d'autres débutants traîneraient sur ce forum, je donne mon code, qui n'est qu'une solution parmi d'autres, mais qui permet de générer facilement des tas d'items du menu grâce à la fonction generer_li dans menu.php :

Sur les pages du site :
Code :
1
2
3
4
5
6
7
 
<div id="header">
        	<?php
        		$current = basename($_SERVER['PHP_SELF']);
			include "menu.php" ;
		?>
</div>
Note : toutes mes pages sont situées dans le même répertoire sur mon serveur. Dans le cas contraire, le problème serait plus complexe.

Page menu.php :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
 
function generer_li($link, $title, $cur) {
	echo "\t\t<li ";
	if($cur==$link) echo 'id="current"';
	echo '><a href="' . $link . '">'. $title . '</a></li>';
	echo "\n";
}
 
echo "\t<ul>\n";
	generer_li("home.php","Home",$current);
	generer_li("contact.php","Contact",$current);
	generer_li("page1.php","Une page",$current);
	generer_li("page2.php","Deux pages",$current);
	generer_li("page3.php","Trois pages",$current);
echo "\t</ul>\n";
 
?>
Note : les \t et les \n à profusion ne servent qu'à générer un code html propre.
kéraunos 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 18h51.


 
 
 
 
Partenaires

Hébergement Web