condition OU

Mammouth du PHP | 620 Messages

21 janv. 2010, 18:29

bonjour
pour mon menu et l'affichage d'une classe active je fais une comparaison afin de voir si la page sur laquelle l'internaute est correspond a celle du lien.
        <?php
        $class_active = ($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] == 'www.monsite.com/pages/chambres.php') ?  'class="active"' : '';
        ?>
        <li <?php echo $class_active; ?>><a href='../pages/chambres.php' title="Les chambres" >Les chambres</a></li>

le hic est que cette comparaison ne fonctionnera que dans le cas bien précis ou on a l'adresse correspond exactement celle du lien.
par exemple dans le code cité ci dessus si l'internaute dans son naviguateur a rentrée manuellement 'monsite.com' sans les www alors la class ne sera pas active. je voudrais donc soit ajouter un condition OU soit savoir si il existe une fonction qui permet si l'internaute rentre sur le sie sans les www de les ajouter automatiquement.

Merci pour votre aide.

ViPHP
ViPHP | 928 Messages

21 janv. 2010, 18:52

Salut,
voilà qui devrait faire l'affaire (une expression régulière) :
$class_active = (preg_match('#monsite\.com/pages/chambres\.php$#', $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) ?  'class="active"' : '';

ViPHP
AB
ViPHP | 5818 Messages

21 janv. 2010, 18:59

bonjour
pour mon menu et l'affichage d'une classe active je fais une comparaison afin de voir si la page sur laquelle l'internaute est correspond a celle du lien.
        <?php
        $class_active = ($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] == 'www.monsite.com/pages/chambres.php') ?  'class="active"' : '';
        ?>
        <li <?php echo $class_active; ?>><a href='../pages/chambres.php' title="Les chambres" >Les chambres</a></li>

le hic est que cette comparaison ne fonctionnera que dans le cas bien précis ou on a l'adresse correspond exactement celle du lien.
par exemple dans le code cité ci dessus si l'internaute dans son naviguateur a rentrée manuellement 'monsite.com' sans les www alors la class ne sera pas active. je voudrais donc soit ajouter un condition OU soit savoir si il existe une fonction qui permet si l'internaute rentre sur le sie sans les www de les ajouter automatiquement.

Merci pour votre aide.
bah la condition 'ou' c'est '||' donc pour reprendre ton code
$adresse = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
 $class_active = $adresse == 'www.monsite.com/pages/chambres.php' || $adresse == 'monsite.com/pages/chambres.php' ?  'class="active"' : '';
EDIT j'avais pas vu la réponse de Genova qui est un peu plus perfectionnée.

Mammouth du PHP | 620 Messages

21 janv. 2010, 20:00

Ok merci j'ai opté pour la méthode de Genova.
par contre un petit probleme pour la page d'accueil quand on a que le nom de domaine : http://www.monsite.com
dans ce cas là la class ne fonctionne pas.
Pourquoi ?
  $class_active = (preg_match('#monsite\.com$#', $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'])) ?  'class="active"' : '';
si je fait :
  $class_active = (preg_match('#monsite\.com$#', $_SERVER['HTTP_HOST'])) ?  'class="active"' : '';
la classe est active mais le reste sur n'importe qu'elle pages.

ViPHP
AB
ViPHP | 5818 Messages

21 janv. 2010, 23:34

Sur quelles pages exactement tu voudrais que ta classe soit active ?

Mammouth du PHP | 620 Messages

21 janv. 2010, 23:43

et bien la classe fonctionne sur toutes mes pages sauf sur la page d'accueil.
par exemple dans mon menu j'ai un lien "accueil" qui pointe vers le nom de domaine et donc quand je suis sur la racine du domaine mondomain.net sans rien deriere (pas de index.php) ma classe ne fonctionne pas.

ViPHP
AB
ViPHP | 5818 Messages

22 janv. 2010, 01:49

Pour ta page d'accueil testes plutôt si $_SERVER['REQUEST_URI'] est égal à '/' ou '/index.php'

Mammouth du PHP | 620 Messages

22 janv. 2010, 09:57

bonjour j'ai fais plusieurs essai mais aucun ne fonctionnent.
$adresse = $_SERVER['HTTP_HOST'];
$class_active = $adresse == 'www.monsite.com/' || $adresse == 'monsite.com/index.php' ?  'class="active"' : '';
ou
$adresse = $_SERVER['REQUEST_URI'];
$class_active = $adresse == 'www.monsite.com/' || $adresse == 'monsite.com/index.php' ?  'class="active"' : '';
ou
$class_active = (preg_match('#monsite\.com$#', $_SERVER['REQUEST_URI'])) ?  'class="active"' : '';
ma classe ne s'active jamais pour la page d'accueil

ViPHP
AB
ViPHP | 5818 Messages

22 janv. 2010, 11:18

Pour ta page d'accueil testes plutôt si $_SERVER['REQUEST_URI'] est égal à '/' ou '/index.php'
La traduction ce cette phrase en code est

Code : Tout sélectionner

$class_active = $_SERVER['REQUEST_URI'] == '/' || $_SERVER['REQUEST_URI'] == '/index.php' ? 'class="active"' : '';
Et puis tu n'as qu'à faire afficher echo $_SERVER['REQUEST_URI'] dans ta page d'accueil en phase de test pour voir les différentes valeur qu'elle retourne en fonction des URL possibles pour y accéder.

Mammouth du PHP | 620 Messages

22 janv. 2010, 12:19

Oui merci sa fonctionne avec cette méthode sur toutes les pages de mon site.