Page 1 sur 2

Changer de classe css en fonction de l'url dynamique

Posté : 02 déc. 2014, 17:03
par fannym
Bonjour,

Je souhaite pourvoir changer de class css mes éléments de menus lorsque l'on est sur la page sélectionnée.
L'url est générée dynamiquement et ressemble à : /tagstest.php?tag=all puis /tagstest.php?tag=1 et ainsi de suite.

Voici mon code php :

<?php

$url = $_SERVER['REQUEST_URL];
if ($url == 'tagstest.php?tag=all') {$class = "menusurb";} else {$class = "menunorm";}
if ($url == 'tagstest.php?tag=1') {$class2 = "menusurb";} else {$class2 = "menunorm";}

?>

Mon code html :
<div id="nav-tags">
<h3>Tags_____</h3>
<ul>
<li><a class="'.$class.'" href="tagstest.php?tag=all" id="all">&nbsp;ALL&nbsp;</a></li>
<?php
//récupération dynamique des tags
$sqltag="select * from t_tags;";
$rstag=mysql_query($sqltag);
while($enr=mysql_fetch_object($rstag)){
print("<li><a class='".$class2."' href='tagstest.php?tag=".$enr->tags_id."'>&nbsp;".$enr->tags_label."&nbsp;</a></li>");
}
?>
</ul>
</div>

Mais cela ne fonctionne pas.

Auriez-vous une solution ?

merci d'avance,
fanny

Re: Changer de classe css en fonction de l'url dynamique

Posté : 02 déc. 2014, 17:06
par ecumastor
Salut,
Il manque un guillement dans $url = $_SERVER['REQUEST_URL];

Re: Changer de classe css en fonction de l'url dynamique

Posté : 02 déc. 2014, 17:10
par fannym
oui ici en effet, mais il y figure dans mon code sur le serveur...

Re: Changer de classe css en fonction de l'url dynamique

Posté : 02 déc. 2014, 17:10
par ecumastor
Re-salut,
Dans le HTML, encadre la variable "$class" pour le php:

Code : Tout sélectionner

<li><a class="'.$class.'" href="tagstest.php?tag=all" id="all">&nbsp;ALL&nbsp;</a></li>
devient

Code : Tout sélectionner

<li><a class="<? echo $class ?>" href="tagstest.php?tag=all" id="all">&nbsp;ALL&nbsp;</a></li>

Re: Changer de classe css en fonction de l'url dynamique

Posté : 02 déc. 2014, 17:20
par fannym
merci en effet je retrouve bien une classe css dans le html du site, mais le problème c'est que ce n'est pas la classe attendue à savoir "menusurb".
J'ai la classe "menunorm".

Comme si l'url n'était pas bien détectée.

Est-ce que mon chemin d'url est correct?

Re: Changer de classe css en fonction de l'url dynamique

Posté : 02 déc. 2014, 17:32
par ecumastor
Pour récupérer une variable dans l'url : tagstest.php?tag=all, il faut utiliser cette syntaxe :

Code : Tout sélectionner

<? echo"Test pour voir si la variable arrive : ".$_GET["tag"]."<br>"; if($_GET["tag"]=="all"){$class = "menusurb";} else {$class = "menunorm";} if($_GET["tag"]=="1"){$class2 = "menusurb";} else {$class2 = "menunorm";} ?>

Re: Changer de classe css en fonction de l'url dynamique

Posté : 02 déc. 2014, 17:41
par fannym
merci, oui la variable arrive et la classe passe bien dans le html.
mais elle ne s'applique pas je vais creuser, j'ai peut-être aussi un pb css

en tous cas merci pour votre aide :)

je reviendrai marquer en résolu dès que tout fonctionnera :)

Re: Changer de classe css en fonction de l'url dynamique

Posté : 03 déc. 2014, 16:40
par fannym
POur ce qui est de tag == all, cela fonctionne.

Mais si je décline avec mes autres ids de tags :
<?
echo"Test pour voir si la variable arrive : ".$_GET["tag"]."<br>";
if($_GET["tag"]=="all"){$class = "menusurb";} else {$class = "menunorm";}
if($_GET["tag"]=="1"){$class2 = "menusurb";} else {$class2 = "menunorm";}
if($_GET["tag"]=="2"){$class2 = "menusurb";} else {$class2 = "menunorm";}
if($_GET["tag"]=="3"){$class2 = "menusurb";} else {$class2 = "menunorm";}
?>

avec l'html comme suit :

<div id="nav-tags">
<h3>Tags_____</h3>
<ul>
<li><a class="'.$class.'" href="tagstest.php?tag=all" id="all">&nbsp;ALL&nbsp;</a></li>
<?php
//récupération dynamique des tags
$sqltag="select * from t_tags;";
$rstag=mysql_query($sqltag);
while($enr=mysql_fetch_object($rstag)){
print("<li><a class='".$class2."' href='tagstest.php?tag=".$enr->tags_id."'>&nbsp;".$enr->tags_label."&nbsp;</a></li>");
}
?>
</ul>
</div>

Cela ne fonctionne pas sur le autres que "all".

est-ce que je dois modifier le ".$class2." dans le print ?

Re: Changer de classe css en fonction de l'url dynamique

Posté : 03 déc. 2014, 17:23
par Megadeth
Slt,

Fais un echo de ton $_GET["tag"] du style

<?php echo "---->".$_GET["tag"]; ?> pour savoir ce qu'il te renvoie.

Normalement ça doit fonctionner mais essaie d'enlever les guillemets autour de 1, 2 et 3
if($_GET["tag"]==1){$class2 = "menusurb";} else {$class2 = "menunorm";}

Sinon l'autre option consiste à faire ta condition de class dans ton while.

Tu déclares un class1, class2 au dessus et tu testes la valeur de l'id.

Mega
;)

Re: Changer de classe css en fonction de l'url dynamique

Posté : 03 déc. 2014, 20:43
par fannym
merci

La valeur du tag est bien renvoyée, mais la suppression des guillemets ne change rien.

je vais essayer de mettre en place ta seconde solution

Re: Changer de classe css en fonction de l'url dynamique

Posté : 04 déc. 2014, 01:29
par Megadeth
Slt,

Ce code :
while($enr=mysql_fetch_object($rstag)){
print("<li><a class='".$class2."' href='tagstest.php?tag=".$enr->tags_id."'>&nbsp;".$enr->tags_label."&nbsp;</a></li>");
}

te renvoie bien par exemple
<li><a class="menusurb" href="tagstest.php?tag=1"> ton label </a></li>

Autre supposition, tu n'aurais pas un style au dessus qui prend la main sur tous les autres styles ?

Ton fichier css est bien appelé dans tous les cas de figure ?

Mega
;)

Re: Changer de classe css en fonction de l'url dynamique

Posté : 04 déc. 2014, 18:30
par fannym
hello

Oui il me renvoit bien le contenu de la classe mais cela ne fonctionne que pour le tag=1 par exemple, et tous les autres tags (2,3,4...) prennent la même classe que le 1

Le css fonctionne bien pour le all et pour le 1, c'est pour les autres labels de tags que cela pose pb

Re: Changer de classe css en fonction de l'url dynamique

Posté : 05 déc. 2014, 09:40
par Megadeth
Re,

Bah la seule explication que je vois (si les autres ont été testées) c'est que ton tags_id ne renvoie pas 2, 3...

As-tu essayé de passer ta variable en dur dans l'url ?

Tu es sûre que <li><a class='".$class2."' href='tagstest.php?tag=".$enr->tags_id."'>&nbsp;".$enr->tags_label."&nbsp;</a></li>

renvoie bien tagstest.php?tag=2

Au pire poste le lien du site ou ta page entièrement ;)

Mega
;)

Re: Changer de classe css en fonction de l'url dynamique

Posté : 05 déc. 2014, 11:41
par fannym
Hello,

Oui les variables sont bien renvoyées tu peux regarder ce que cela fait sur :
http://beesub.org/blog/Fanny/tagstest.php

le message de test en haut à gauche indique bien la variable renvoyée, cela fonctionne donc bien pour all et 1 mais pas la suite.

Merci pour ton aide :)

Re: Changer de classe css en fonction de l'url dynamique

Posté : 09 déc. 2014, 11:43
par fannym
Hello Mega,

Tu as pu regardé la page?

merci