Menu externe avec fonction include et class:active

Menu externe avec fonction include et class:active - PHP - Programmation

Marsh Posté le 01-05-2015 à 22:16:43    

Bonjour,
 
mon titre n'étant pas très clair je vais l'expliquer:
 
J'ai un site dans lequel j'ai extériorisé mon header via php et une fonction include.
 
Le problème c'est que dans mon menu j'ai une class:active qui permet de colorer le point du menu de la page sur laquelle on est, comme sur startseite ici:
http://testwebsite.physio-in-esslingen.de/index
 
ET maintenant que j'ai extériorisé mon header celui-ci est le même pour chaque page et du coup le point de menu actif est toujours le même.
 
Est ce que je peux régler ca pour que la class active se change tout en gardant mon header externe?
 
Merci

Reply

Marsh Posté le 01-05-2015 à 22:16:43   

Reply

Marsh Posté le 02-05-2015 à 01:05:01    

Je pense qu'en PHP c'est pas possible. Vu que tu appelles le même code sur toutes tes pages.  
 
Après peut être qu'avec des conditions ça peut se faire mais j'ai pas l'idée en tête.  
 
Renseigne toi plutôt du côté du JavaScript, ça pourrait être possible.
Bon je ne t'ai pas forcément beaucoup aidé mais si j'ai pu te donner une piste...


---------------
L'écoconception n'est pas négociable - Topic habitats de demain : https://tinyurl.com/y5h2mjx7
Reply

Marsh Posté le 02-05-2015 à 07:28:07    

Merci,
je vais voir ca.

Reply

Marsh Posté le 03-05-2015 à 02:20:18    

Bien évidemment que c'est faisable en PHP
 
Dans ton header il suffit de detecter sur quelle page tu es. Soit tu regardes pour utiliser  $_SERVER ( REQUEST_URI ou PHP_SELF par ex), soit tu mets une variable genre $page avant d'appeler ton menu
 

Reply

Marsh Posté le 03-05-2015 à 08:45:34    

Et comment j'ajoute cette fonction dans mon menu?
Pour l'instant je n'ai le class:active que sur la class qui doit être active...
 
Voici mon menu:

Code :
  1. <div class="span7 navigation">
  2.             <div class="navbar hidden-phone">
  3.            
  4.             <ul class="nav">
  5.             <li><a href="./index">Startseite </a></li>
  6.            <li><a href="./ueber-uns">Über Uns</a></li>
  7.             <li class="dropdown">
  8.                <a class="dropdown-toggle" data-toggle="dropdown" onclick="self.location.href='./leistungen'" style="cursor: pointer;">Leistungen<b class="caret"></b></a>
  9.                 <ul class="dropdown-menu">
  10.                     <li><a href="./leistungen/krankengymnastik">Krankengymnastik</a></li>
  11.                     <li><a href="./leistungen/manuelle-therapie">Manuelle Therapie</a></li>
  12.                     <li><a href="./leistungen/bobath">Therapie nach Bobath</a></li>
  13.                     <li><a href="./leistungen/manuelle-lymphdrainage">Manuelle Lymphdrainage</a></li>
  14.     <li><a href="./leistungen/sportphysiotherapie">Sportphysiotherapie</a></li>
  15.                     <li><a href="./leistungen/massage">Massage</a></li>
  16.                     <li><a href="./leistungen/wellness">Wellness</a></li>
  17.                     <li><a href="./leistungen/hausbesuche">Hausbesuche</a></li>
  18.                 </ul>
  19.             </li>
  20.              <li><a href="./unsere-praxis">Unsere Praxis </a></li>
  21.              <li class="dropdown">
  22.                 <a class="dropdown-toggle" data-toggle="dropdown" onclick="self.location.href='./unser-team'" style="cursor: pointer;">Unser Team <b class="caret"></b></a>
  23.                 <ul class="dropdown-menu">
  24.                     <li><a href="./unser-team/sebastien-fournereau">Sébastien Fournereau</a></li>
  25.                     <li><a href="./unser-team/fikreta-crnkic">Fikreta Crnkic'</a></li>
  26.                 </ul>
  27.              </li>
  28.              <li class="active"><a href="./kontakt">Kontakt</a></li>
  29.             </ul>
  30.          
  31.             </div>

Reply

Marsh Posté le 04-05-2015 à 17:46:44    

Merci, j ai essayé mais pas tout réussi...
 
Voila c que j ai fait:

Code :
  1. <div class="span7 navigation">
  2.             <div class="navbar hidden-phone">
  3.            
  4.             <ul class="nav">
  5.             <li <?php if (preg_match("#./index#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> ><a href="./index">Startseite </a></li>
  6.            <li <?php if (preg_match("#./ueber-uns#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> ><a href="./ueber-uns">Über Uns</a></li>
  7.             <li <?php if (preg_match("#./leistungen#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> class="dropdown">
  8.                <a class="dropdown-toggle" data-toggle="dropdown" onclick="self.location.href='./leistungen'" style="cursor: pointer;">Leistungen<b class="caret"></b></a>
  9.                 <ul class="dropdown-menu">
  10.                     <li><a href="./leistungen/krankengymnastik">Krankengymnastik</a></li>
  11.                     <li><a href="./leistungen/manuelle-therapie">Manuelle Therapie</a></li>
  12.                     <li><a href="./leistungen/bobath">Therapie nach Bobath</a></li>
  13.                     <li><a href="./leistungen/manuelle-lymphdrainage">Manuelle Lymphdrainage</a></li>
  14.     <li><a href="./leistungen/sportphysiotherapie">Sportphysiotherapie</a></li>
  15.                     <li><a href="./leistungen/massage">Massage</a></li>
  16.                     <li><a href="./leistungen/wellness">Wellness</a></li>
  17.                     <li><a href="./leistungen/hausbesuche">Hausbesuche</a></li>
  18.                 </ul>
  19.             </li>
  20.              <li <?php if (preg_match("#./unsere-praxis#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> ><a href="./unsere-praxis">Unsere Praxis </a></li>
  21.              <li class="dropdown" <?php if (preg_match("#./unser-team#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> >
  22.                 <a class="dropdown-toggle" data-toggle="dropdown" onclick="self.location.href='./unser-team'" style="cursor: pointer;">Unser Team <b class="caret"></b></a>
  23.                 <ul class="dropdown-menu">
  24.                     <li <?php if (preg_match("#./unser-team/sebastien-fournereau#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> ><a href="./unser-team/sebastien-fournereau">Sébastien Fournereau</a></li>
  25.                     <li><a href="./unser-team/fikreta-crnkic">Fikreta Crnkic'</a></li>
  26.                 </ul>
  27.              </li>
  28.              <li <?php if (preg_match("#./kontakt#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> ><a href="./kontakt">Kontakt</a></li>
  29.             </ul>
  30.          
  31.             </div>


 
Le problème c'est que ca fonctionne dans la partie unser-team mais pas dans leistungen.
Et je ne sais pas comment faire pour que la class active aille sur unser-team quand on clique sur sebastien-fournereau et non sur sebastien-fournereau

Reply

Marsh Posté le 05-05-2015 à 10:59:59    

Fait un echo $_SERVER['REQUEST_URI']; et tu comprendras tout de suite pourquoi ton pregmatch ne fonctionne pas...
 
Et utiliser des regex pour détecter un début d'url c'est overkill, tu peux faire :
if (substr($_SERVER['REQUEST_URI'],0,7) == 'kontakt') { ce sera nettement plus léger pour le serveur...


---------------
D3
Reply

Marsh Posté le 05-05-2015 à 16:00:29    

Je ne comprends pas...
 
Est ce que je dois ecrire ca?

Code :
  1. <li <?php if (substr($_SERVER['REQUEST_URI'],0,7) == 'index') { echo $_SERVER['REQUEST_URI'];("class=\"active\"" ); } ?> ><a href="./index">Startseite </a></li>

Reply

Marsh Posté le 05-05-2015 à 17:08:30    

index n'ayant que 5 lettres, ça ne vas pas le faire, quand a ce qu'il y'a entre les brackets, je ne veux même pas chercher à comprendre comment tu as pu penser que je voulais te faire écrire ça...
 
Le echo request_uri c'était pour que tu vois que ça ne commencera jamais par ./, par / à la rigueur (me souvient plus) et dans ce cas faudra modifier le substr($url, 1, $longueur_de_ma_chaine) pour ignorer le /.
 
Sur ce forum on veut bien donner des conseils, mais on ne donnes que rarement de solution toute faite et complète (le plus souvent par manque de temps), donc on attend au minimum que les gens cherchent par eux même ( http://php.net/manual/fr/function.substr.php ), c'est comme ça qu'on progresse !
 


---------------
D3
Reply

Marsh Posté le 05-05-2015 à 21:44:14    

Ok alors j'ai mis mon header.inc.php dans le dossier leistungen et du coup ca fonctionne pour leistungen mais je ne comprends donc pas pourquoi ca fonctionne pour unser-team alors que ce dernier est aussi dans un sous-dossier dans lequel je n'ai pas mis le header.inc.php.
 
Pour le reste j ai essayer ca:
<li <?php if (substr($_SERVER['REQUEST_URI'],0,-1) == 'index') { echo ("class=\"active\"" ); } ?> ><a href="./index">Startseite </a></li>
 
et ca:
<li <?php if (substr($_SERVER['REQUEST_URI'],0,5) == 'index') { echo ("class=\"active\"" ); } ?> ><a href="./index">Startseite </a></li>
ou encore ca:
<li <?php if (substr($_SERVER['REQUEST_URI'],0,-1) == '/index') { echo ("class=\"active\"" ); } ?> ><a href="./index">Startseite </a></li>
et ca:
<li <?php if (substr($_SERVER['REQUEST_URI'],0,6) == '/index') { echo ("class=\"active\"" ); } ?> ><a href="./index">Startseite </a></li>
 
Mais ca ne donne rien...

Reply

Marsh Posté le 05-05-2015 à 21:44:14   

Reply

Marsh Posté le 06-05-2015 à 09:09:05    

affiche quelque part dans ta page $_SERVER['REQUEST_URI'], ça t'aidera a comprendre ton erreur, si tu est dans un sous dossier, REQUEST_URI ne commence sans doute pas par index, dans ce cas la fonction http://php.net/manual/fr/function.pathinfo.php pourra sans doute t'aider...


---------------
D3
Reply

Marsh Posté le 06-05-2015 à 18:11:41    

ok j ai corrigé mon erreur mais je n'arrive pas a me debrouiller avec le request_uri ma class ne passe pas en active...

Reply

Marsh Posté le 06-05-2015 à 18:32:24    

j ai une structure comme suit:
C:\xampp\htdocs\site2\index.php
et  
C:\xampp\htdocs\site2\leistungen\index.php

Reply

Marsh Posté le 07-05-2015 à 09:23:42    

Jamais 2 sans 3, si tu veux utiliser $_SERVER['REQUEST_URI'] pour identifier sur quel page tu te trouves et afficher une classe :
commence par afficher ce que contient $_SERVER['REQUEST_URI'] (en allant sur plusieurs pages différentes bien sur)
Une fois ceci fait tu comprendras ce que contient cette variable, et tu adapteras ton code en conséquence...
 
D'ailleurs pour mieux faire tu devrais utiliser une fonction :

Code :
  1. function IsActive($page) {
  2.   if ($page == substr($_SERVER['REQUEST_URI'],0,-1)) {
  3.     return ' class="active"';
  4.   }
  5. }
  6. <li<?php echo IsActive('/site2/unser-team/sebastien-fournereau'); ?>><a href="./unser-team/sebastien-fournereau">Sébastien Fournereau</a></li>


---------------
D3
Reply

Marsh Posté le 07-05-2015 à 21:21:25    

Comment est ce que j affiche $_SERVER['REQUEST_URI'], je l avais reussi mais j'ai oublié :??:

Reply

Marsh Posté le 10-05-2015 à 16:25:13    

Code :
  1. echo  $_SERVER['REQUEST_URI'];


Reply

Marsh Posté le 29-05-2015 à 20:16:06    

Code :
  1. <ul class="nav">
  2.              <?php echo '<li'.(substr($_SERVER['REQUEST_URI']) == '/index.php' ?  ' class="active"' : null).'><a href="./index.php">Startseite</a></li>'; ?>
  3.              <?php echo '<li'.(substr($_SERVER['REQUEST_URI']) == 'testwebsite.physio-in-esslingen.de/ueber-uns' ?  ' class="active"' : null).'><a href="./ueber-uns.php">Über uns</a></li>'; ?>
  4.                <a class="dropdown-toggle" data-toggle="dropdown" onclick="self.location.href='./leistungen'" style="cursor: pointer;"><?php echo '<li class="dropdown"'.(substr($_SERVER['REQUEST_URI']) == 'testwebsite.physio-in-esslingen.de/leistungen' ?  ' class="active"' : null).'><a href="./leistungen.php">Leistungen</a></li>'; ?><b class="caret"></b></a>
  5.                 <ul class="dropdown-menu">
  6.                     <li><a href="./leistungen/krankengymnastik">Krankengymnastik</a></li>
  7.                     <li><a href="./leistungen/manuelle-therapie">Manuelle Therapie</a></li>
  8.                     <li><a href="./leistungen/bobath">Therapie nach Bobath</a></li>
  9.                     <li><a href="./leistungen/manuelle-lymphdrainage">Manuelle Lymphdrainage</a></li>
  10.                     <li><a href="./leistungen/sportphysiotherapie">Sportphysiotherapie</a></li>
  11.                     <li><a href="./leistungen/massage">Massage</a></li>
  12.                     <li><a href="./leistungen/wellness">Wellness</a></li>
  13.                     <li><a href="./leistungen/hausbesuche">Hausbesuche</a></li>
  14.                 </ul>
  15.             </li>
  16.              <?php echo '<li'.(substr($_SERVER['REQUEST_URI']) == 'testwebsite.physio-in-esslingen.de/unsere-praxis' ?  ' class="active"' : null).'><a href="./unsere-praxis.php">Unsere Praxis</a></li>'; ?>
  17.              <li class="dropdown" <?php if (preg_match("#./unser-team#", $_SERVER['REQUEST_URI']) ) { echo ("class=\"active\"" ); } ?> >
  18.                 <a class="dropdown-toggle" data-toggle="dropdown" onclick="self.location.href='./unser-team'" style="cursor: pointer;">Unser Team <b class="caret"></b></a>
  19.                 <ul class="dropdown-menu">


 
Voila ou j en suis mais ca ne fonctionne pas...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed