28172 sujets

CSS et mise en forme, CSS3

Salut:

J'ai trouvé il y a peu un menu ( que j'essaie d'adapter).
http://home.base.be/vt6311386/test.html

J'essaie en vain de trouver le moyen de déterminer une classe pour situer que je suis sur la page en cours... Pour se faire, je souhaiterais que la couleur en BG de la page sur laquelle je me trouve, ait la même couleur que mon hover.
(dans ce cas-ci, la page c'est "test", donc dans mon menu, test devrait avoir un bg noir)

D'habitude je conçois une .active, mais ici, c'est un peu plus complexe

Je n'ai pas placé le code dans un css externe, plus facile d'analyser de cette façon..

Auriez-vous une piste?
Modifié par FranZz (27 Feb 2010 - 23:55)
Salut,

je ne vois pas où est le problème... il suffit d'affecter une classe au lien de la page active non ?
Hello

ok, ok... Je me suis mal exprimé.

Si je mets ce menu sur chaque page, ça fonctionne ( la classe différente à chaque fois ).

Mais quand mon menu est en php, ça devient plus chaud...
( reconnaissance de la page et application de la classe)

J'avais ceci pour un autre site, que j'essaie d'adapter:

<?php
// Création d'un vecteur de lien contenant les liens hypertextes du menu
$items = array(
         array("link"=>"/ds/index.php", "label"=>"Accueil"),
         array("link"=>"/ds/news.php", "label"=>"News"),
		 array("link"=>"/ds/conseils.php", "label"=>"Conseils"),
         array("link"=>"/ds/livres.php", "label"=>"Livres"),
         array("link"=>"/ds/pages/med_acces/le_corps_humain.htm", "label"=>"Le corps humain"),
		 array("link"=>"/ds/pyramide.php", "label"=>"La Pyramide"),
		 array("link"=>"/ds/magazines.php", "label"=>"Magazines"),
         array("link"=>"/ds/bmi.php", "label"=>"Calcul BMI"),
		 array("link"=>"/ds/formagenda.php", "label"=>'Agenda <span class="acces_payant">(new)</span>'),
		 array("link"=>"/ds/archives.php", "label"=>"Archives"),
		 array("link"=>"/ds/recherche.php", "label"=>"Recherche"),
		 array("link"=>"/ds/liens.php", "label"=>"Liens"),
		 array("link"=>"/ds/charte.php", "label"=>"Charte"),
		 array("link"=>"/ds/contact.php", "label"=>"Contact"));
$menu = '';

// Boucle de création de la liste <ul><li>
foreach ($items as $val) {
    $menu .= '<li><a href="'.$val['link'].'"';
    // Vérification si la page X est la page en cours
    // Si oui ajouter la classe « current » à l'élément de la liste
    if ($_SERVER['SCRIPT_NAME'] == $val['link'])
    $menu .= ' class="current"';
    $menu .= '>'.$val['label'].'</a></li>';
}

echo $menu; 

?>


Modifié par FranZz (25 Feb 2010 - 11:52)
Salut,

Sur mon site j'utilise ceci :

<?php if ($pageName == 'affichesplv') { echo '<p>Affiches / Plv</p>'; }
else { echo '<a href="affichesplv.php">Affiches / Plv</a>'; } ?>

En ajoutant un nom à la page bien évidemment.

Ainsi, dans mon cas si le nom correspond, il affichera un paragraphe rendant le lien non cliquable, sinon il affichera le lien. Avec des styles différents pour le paragraphe et le lien. Je n'utilise du coup pas de classe.
La technique de Mikachu va fonctionner mais c'est un peu fastidieux et le code n'est pas factorisé. Smiley murf

Le principe d'un array est quand même préférable et le tout est de savoir comment est géré ton site (ou dit autrement comment récupérer l'information de la page en cours selon l'url). Tu as un exemple dans ce post.
Mon site est structuré comme ceci:

10 pages portant un nom différent ( news - agenda - liens - le corps... )

Même structure pour toutes les pages
inculde header ( contenu header )
include menu ( menu )
include gauche ( pub - partenaires )
content ( mes données puisées depuis BDD)
include footer ( coordonnées )

Je cherche à reproduire le schéma cité ci-haut, mais adapté à mon nouveau menu...
Je regarde le post que tu me renseignes pour voir s'il 'y a pas d'infos à grapiller.
Mon prob c'est que j'ai déjà des .class pour définir le bg de mon menu...

Et entre parenthèses, des <em> dans des <li>, c'est pas super valide...si?
Modifié par FranZz (25 Feb 2010 - 15:56)
Bon, c'est peut-être pas la meilleure des solutions, mais j'ai trouvé un moyen de résoudre mon problème en faisant ceci:
<ul id="off">
<li><a class="<?php if ($thisPage == 'news') { echo 'newso'; }else { echo 'news'; } ?>" href="news.php"><em class="top"></em><em class="middle">News</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'agenda') { echo 'agendao'; }else { echo 'agenda'; } ?>" href="agenda.php"><em class="top"></em><em class="middle">Agenda</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'fiches') { echo 'ficheso'; }else { echo 'fiches'; } ?>" href="fiches.php"><em class="top"></em><em class="middle">Fiches patient</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'actualite') { echo 'actualiteo'; }else { echo 'actualite'; } ?>" href="#nogo4"><em class="top"></em><em class="middle">Actualite</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'contact') { echo 'contacto'; }else { echo 'contact'; } ?>" href="#nogo5"><em class="top"></em><em class="middle">Contact</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'archives') { echo 'archiveso'; }else { echo 'archives'; } ?>" href="#nogo6"><em class="top"></em><em class="middle">Archives</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'livres') { echo 'livreso'; }else { echo 'livres'; } ?>" href="#nogo7"><em class="top"></em><em class="middle">Livres</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'newsletter') { echo 'newslettero'; }else { echo 'newsletter'; } ?>" href="#nogo8"><em class="top"></em><em class="middle">Newsletter</em><em class="bottom"></em></a></li>
<li><a class="<?php if ($thisPage == 'revue') { echo 'revueo'; }else { echo 'revue'; } ?>" href="#nogo9"><em class="top"></em><em class="middle">Revue</em><em class="bottom"></em></a></li>
</ul>


Je place ce code en début de chaque page:
<?php $thisPage=basename($_SERVER["SCRIPT_NAME"]); ?>

Modifié par FranZz (26 Feb 2010 - 10:28)
En gardant la variable $thisPage tu aurais pu faire :
<ul id="off">
<?php
$liens = array(
	'news'			=>	'News',
	'agenda'		=>	'Agenda',
	'fiches'		=>	'Fiches patient',
	'actualite'		=>	'Actualite',
	'contact'		=>	'Contact',
	'archives'		=>	'Archives',
	'livres'		=>	'Livres',
	'newsletter'	=>	'Newsletter',
	'revue'			=>	'Revue'
);

foreach($liens as $key => $value) {
	$suffixe = ($thisPage == $key.'.php') ? 'o' : '';
	echo "\t".'<li><a class="'.$key.$suffixe.'" href="'.$key.'.php"><em class="top"></em><em class="middle">'.$value.'</em><em class="bottom"></em></a></li>'."\n";
}	
?>
</ul>


Et si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne
Salut_

Avant d'appliquer le résolu, j'ai envie de tester ta soluce lundi.

J'ai essayé la méthode en question tout à l'heure, mais sans succès.

Cela dit, merci de t'être penché sur mon stress. Smiley biggol La suite lundi.
Modifié par FranZz (26 Feb 2010 - 23:11)
Je viens de tester, mais la reconaissance de la page ne semble pas fonctioner.

Mon menu est impec, mais pas moyen de ajouter le "o" à ma classe...

Je cherche l'erreur.

[27-Feb-2010 23:48:19] PHP Notice: Undefined variable: thisPage in /Applications/MAMP/htdocs/ditl/a/navigation.php on line 16

> OK, j'ai oublié de mettre la première ligne de code.

Tout fontionne à présent!

un Grand merci! Smiley lol Smiley lol

Je n'ai "plus qu'à " essayer de comprendre! Smiley langue
Modifié par FranZz (27 Feb 2010 - 23:54)