Page 1 sur 1
condition OU
Posté : 21 janv. 2010, 18:29
par fabrice88250
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.
Re: condition OU
Posté : 21 janv. 2010, 18:52
par Genova
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"' : '';
Re: condition OU
Posté : 21 janv. 2010, 18:59
par AB
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.
Re: condition OU
Posté : 21 janv. 2010, 20:00
par fabrice88250
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.
Re: condition OU
Posté : 21 janv. 2010, 23:34
par AB
Sur quelles pages exactement tu voudrais que ta classe soit active ?
Re: condition OU
Posté : 21 janv. 2010, 23:43
par fabrice88250
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.
Re: condition OU
Posté : 22 janv. 2010, 01:49
par AB
Pour ta page d'accueil testes plutôt si $_SERVER['REQUEST_URI'] est égal à '/' ou '/index.php'
Re: condition OU
Posté : 22 janv. 2010, 09:57
par fabrice88250
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
Re: condition OU
Posté : 22 janv. 2010, 11:18
par AB
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.
Re: condition OU
Posté : 22 janv. 2010, 12:19
par fabrice88250
Oui merci sa fonctionne avec cette méthode sur toutes les pages de mon site.