Loupilo Posté 28 Novembre 2005 Partager Posté 28 Novembre 2005 Salut à tous, Je souhaite insérer un menu sur mon site (<ul><li>...</li></ul) et attribuer une class différente à l'élément de la liste qui est la page visitée. Pour cela je peux récupérer le chemin de la page en PHP, voir qu'il contient "categorie1" pour mettre l'élément catégorie1 avec une class spéciale. Seulement voila, pour écrire ce script j'ai une défaillance de logique : je ne vois pas quelle est la meilleure solution pour faire ça. J'ai pensé à enregistrer dans $li : '<li>' et dans $lis : '<li class="special">' puis mettre dans $elements un array qui contient les différentes possibilités (<a href="/categorie1">categorie1</a>, <a href="/categorie2">categorie2</a>...) Ensuite si l'URL contient categorie2, j'utilise : echo $li $elements[0] </li>; // affiche un li normal pour la catégorie non-activeecho $lis $elements[1] </li>;// affiche un li special pour la categorie2 car c'est elle qui est visitée (je sais que la syntaxe de mes echo est fausse ) Mais le problème avec cette solution c'est qu'elle est lourde : si l'adresse contient categorie1 alors il faut afficher echo $lis $elements[0] </li>; echo $li $elements[1] </li>; Sinon si elle contient categorie2 il faut afficher echo $lis $elements[0] </li>; echo $li $elements[1] </li>; et ça s'il y a 10 catégories Je ne vois pas comment faire ça proprement et le plus simplement possible. Déjà, est-ce que ma solution est la seule // la plus simple/rapide ? Sinon, que feriez-vous pour réaliser ce menu ? Merci Loupilo Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 28 Novembre 2005 Partager Posté 28 Novembre 2005 Salut Loupilo, Déjà si tu as 10 catégories il faut simplifier le code. Sans connaître ton code php, on ne peut qu'être approchant. Donc un pseudo code serait du style: foreach ($elements as $element) { if($elementcategory == $activecategory) print "<li class=\"special\">"; else print "<li>"; print $element."</li>";} Dans lequel $elements est le tableau de tes éléments, et $elementscategory est la catégorie de cet élément. A toi de remplacer cela par le code qui permet de retrouver la catégorie d'un élément. Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
Loupilo Posté 28 Novembre 2005 Auteur Partager Posté 28 Novembre 2005 Ouahou, magnifique, je n'esperais pas que ce soit si court <?php$adresseencours = $_SERVER[REQUEST_URI];$elements = array ("categorie1", "categorie2", "categorie3", "categorie4", "categorie5", "categorie1" "categorie7" "categorie8");foreach ($elements as $element) { if(preg_match("!$element!i", $adresseencours)) { echo "<li class=\"special\">"; } else { echo "<li>"; } echo $element."</li>";}?> Et ça roule ! Merci beaucoup Dan [Edition: tiens d'ailleurs une petite question bête : dans la doc PHP il est écrit qu'utliser preg_match pour ça était trop lourd, qu'il vaut mieux utiliser strpos() ou strstr(), cependant strpos() trouve la position d'un caractère dans une chaîne et strstr() trouve la première occurrence dans une chaîne... ce n'est pas ce que je veux faire, peut-on utiliser ces fonctions pour l'usage que je fais de preg_match ? Et surtout, une de ces fonctions peut-elle être insensible aux caractères accentués (é == è == e) ?] Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dudu Posté 29 Novembre 2005 Partager Posté 29 Novembre 2005 Salut, Il y a aussi la possibilité de définir une class à l'élément body dynamiquement, puis d'avoir un CSS de ce genre .categorie1 #categorie1 {color:#f00;} La class serait celle du body, l'id celle du lien-liste, définie au préalable. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant