Tester une url pour attribuer une classe [Résolu]

Petit nouveau ! | 8 Messages

29 déc. 2011, 12:08

Bonjour,

Travaillant actuellement pour un client désireux de s'offrir un site multilangue; j'ai opté pour le CMS Wordpress en Multisite.
J'ai donc mon url pour le site francophone: http://www.monsite.com/
Puis un dossier pour les langues: http://www.monsite.com/en/ et http://www.monsite.com/de/

Je voudrais modifier la classe d'une div sur mon template en fonction de la langue, et donc de mon url.

Je sais que l'on peut récupérer l'url facilement: <?php echo $_SERVER['REQUEST_URI']; ?>
Il me manque le reste, à savoir:
- conversion en chaîne de caractère
- test: si contient "/en/" alors class="en"; si contient "/de/" alors class="de", si contient ni "/en/" ni "/de/" alors class="fr"

Merci de votre aide ;-)
Modifié en dernier par Oufdeladingue le 29 déc. 2011, 13:54, modifié 1 fois.

ViPHP
ViPHP | 2577 Messages

29 déc. 2011, 12:22

substr($_SERVER['REQUEST_URI'],$pos,2) le problème est de calculer $pos.

Tu peux mettre $pos = 16 tout simplement ou $pos = strpos('/',$_SERVER['REQUEST_URI']) ou encore $pos = strlen($_SERVER['HTTP_HOST']
(à voir s'il faut ajouter 1 ou pas à $pos)

Si tu fais une page <?PHP phpinfo(); ?> tu pourras voir toutes les variables disponible et peut être en choisir une plus appropriée (ne comportant pas le nom de la machine ?) ou vérifier que $_SERVER['HTTP_HOST'] contient bien le nom de la machine.

Mammouth du PHP | 568 Messages

29 déc. 2011, 12:23

Tu dois surement avoir une variable en session qui stock la langue courante...

Fais un print_r de $_SESSION

Si c'est bien le cas tu n'a plus qu'a tester la valeur de langue et modifier la class de ta div.

Petit nouveau ! | 8 Messages

29 déc. 2011, 12:27

Je travaille actuellement en local, et les url données ne sont que des exemples...
Ne peut-on pas simplement tester la présence d'une chaîne de caractères dans une chaîne de caractère:
Si url (ex:www.monsupersite-est-cool.com/en/je-suis-bof-en-php) contient "/en/", alors class="ma-classe-en"

L'utilisation de la position me parait plus compliquée non?

Petit nouveau ! | 8 Messages

29 déc. 2011, 12:30

@Yosh
Le problème avec le test de la langue, c'est que mes trois "sites" sont en fr (installation Wordpress MU pour des utilisateurs français).
La possibilité de tester la langue du navigateur ne m'a pas échappé mais je préférais travailler avec l'url afin de pouvoir "switcher" la classe même si je suis français, anglais, etc...

Mammouth du PHP | 568 Messages

29 déc. 2011, 12:33

@Yosh
Le problème avec le test de la langue, c'est que mes trois "sites" sont en fr (installation Wordpress MU pour des utilisateurs français).
La possibilité de tester la langue du navigateur ne m'a pas échappé mais je préférais travailler avec l'url afin de pouvoir "switcher" la classe même si je suis français, anglais, etc...
Avec Wordpress tu doit pouvoir récupérer la langue avec un code dans le genre:
$lang=get_bloginfo("language");

Petit nouveau ! | 8 Messages

29 déc. 2011, 12:36

Oui mais je ne veux pas travailler sur la langue, mais bien sur l'url de la page...
J'ai déjà fais des recherches sur les possibilités propres à Wordpress mais ça ne correspond pas à ce que je veux...

Je pense à quelque chose du type:

$url = curl_init ("$_SERVER['REQUEST_URI']");
curl_exec($url);
$test = strstr($url, '/en/');
curl_close($url);

echo $test;

Ceci doit être bourré de fautes et ne me renvoi pas une chaîne de caractères qui remplacerai ma class mais là je bloque...

Mammouth du PHP | 568 Messages

29 déc. 2011, 12:41

Oui mais je ne veux pas travailler sur la langue, mais bien sur l'url de la page...
J'ai déjà fais des recherches sur les possibilités propres à Wordpress mais ça ne correspond pas à ce que je veux...

Je pense à quelque chose du type:

$url = curl_init ("$_SERVER['REQUEST_URI']");
curl_exec($url);
$test = strstr($url, '/en/');
curl_close($url);

echo $test;

Ceci doit être bourré de fautes et ne me renvoi pas une chaîne de caractères qui remplacerai ma class mais là je bloque...
Pourquoi du cUrl ? Je comprend pas...

EDIT: regarde du côté de preg_match

Petit nouveau ! | 8 Messages

29 déc. 2011, 12:46

J'ai trouvé ce morceau de code en cherchant sur lenet... C'était juste pour illustrer ce que je désire faire!

Mammouth du PHP | 568 Messages

29 déc. 2011, 13:02

J'ai trouvé ce morceau de code en cherchant sur lenet... C'était juste pour illustrer ce que je désire faire!
Oui mais rien à voir, cUrl te permet de lancer une session à distance.

Petit nouveau ! | 8 Messages

29 déc. 2011, 13:09

ok désolé, autant pour moi...

Tu aurais une idée sur la fonction à créer ?
Un truc dans ce genre mais il me manque le fait de récupérer le résultat sous forme d'une valeur sur laquelle faire un echo dans mon template...
Qu'est-ce que tu en penses?

function test_url() {
$url = $_SERVER["REQUEST_URI"];
$var1 = '/en/';
$var2 = '/de/';
if(strpos($var1, $url) == 0)
return "en";
if(strpos($var2, $url) == 0)
return "de";
else
return "fr"
}

Mammouth du PHP | 568 Messages

29 déc. 2011, 13:21

C'est l'idée oui, mais les paramètres de la fonction str_pos ne sont pas dans le bon ordre.

Sinon un truc dans le genre :
function getLang($url = null) {
        //liste des langues supportées
	$array_lang = array('fr', 'en', 'de');
				
	//recup de l'url courante si non passé en paramètre
	if(empty($url)) {
		$url = $_SERVER["REQUEST_URI"];
	}
				
	//check lang param
	foreach($array_lang as $lang) {
		if(strpos($url, '/'.$lang.'/') !== false) {
			return $lang;
		}
	}
			
	//default lang
	return $array_lang[0];
}
			
Et tu test avec :
echo getLang();
echo getLang('www.monsite.com/fr/');
echo getLang('www.monsite.com/en/');
echo getLang('www.monsite.com/de/');
EDIT: ajout des /

Petit nouveau ! | 8 Messages

29 déc. 2011, 13:32

Merci pour le coup de main:

Pour l'instant, ça ne me retourne que des 'fr' pour tous les sites...
Faut que je précise que je bosse en local (mais ça ne change rien au problème).
J'ai fait un echo sur le template pour chaque url et c'est toujours 'fr'...

Petit nouveau ! | 8 Messages

29 déc. 2011, 13:53

Yeees, j'ai réussi à faire ce que je voulais grâce à ton code.

En fait, il n'y a pas d'url en "/fr", du coup, je fais retourner fr et pas le contenu du tableau si /en et /de ne sont pas présents!!!

Merci vraiment du coup de main rapide et efficace!!!