Titre: redirection par cookie + php
Posté par: lab_siteweb le le 10-10-2004 a 17:48:01
Bonjour à tous, je fais un site multilingue, et j'aimerais pouvoir enregistrer le choix de la langue dans un cookie. Il me faudrait un code qui fasse ça (inclus dans index.php)
-Si cookie=fr -> redirection page fr -Si cookie=de -> redirection page allemand -Si cookie=en -> "continuer le script" -Régler cookie à "en"
J'ai trouvé un script qui faisait plus ou moins ça ici: (http://www.orgalinux.com/article.php3?id_article=77&artsuite=2) mais il ne marche pas chez moi. :(
J'ai également vu ce topic (http://www.forum-webmaster.com/index.php/forum-communaute-entraide/technique-programmation/php-mysql-apache/t1380-15.html) , mais comme j'ai commencer le php très récemment (avant-hier ;D ), je suis pour le moment incapable de faire un synthèse des scripts que je trouve :-\ |
Titre: Re:redirection par cookie + php
Posté par: MFred le le 10-10-2004 a 17:57:55
Salut,
<?php
if ($_COOKIE['lang']=='fr') { header ("Location: http://www.tonsite.com/fr/"); } elseif ($_COOKIE['lang']=='de') { header ("Location: http://www.tonsite.com/de/"); } else { setcookie ('lang','en'); }
?> |
Titre: Re:redirection par cookie + php
Posté par: lab_siteweb le le 11-10-2004 a 12:55:35
Salut et merci pour le code ;) les cookies s'enregistre correctement, pourtant la première fois que je charge la page avec le script ci-dessus, le naviguateur m'envoie ce message d'erreur mais affiche la page correctement en dessous:
Code:
Notice: Undefined index: lang in c:\program files\easyphp1-7\www\cookies\index.php on line 3
Notice: Undefined index: lang in c:\program files\easyphp1-7\www\cookies\index.php on line 5 |
|
apparement, ce sont ces deux lignes qui posent problème:
- if ($_COOKIE['lang']=='fr') {
- } elseif ($_COOKIE['lang']=='de') {
Est-ce que quelqu'un voit d'ou peu venir le problème?
PS. En PHP, quelle est la différence entre les 'gillemets simples' et les "guillemets doubles" ?
|
Titre: Re:redirection par cookie + php
Posté par: MFred le le 11-10-2004 a 19:12:24
Désolé je te le refais :D
<?php
if (isSet($_COOKIE['lang']) && $_COOKIE['lang']=='fr') { header ("Location: http://www.tonsite.com/fr/"); } elseif (isSet($_COOKIE['lang']) && $_COOKIE['lang']=='de') { header ("Location: http://www.tonsite.com/de/"); } else { setcookie ('lang','en'); }
?>
Bonne chance ! |
Titre: Re:redirection par cookie + php
Posté par: bigornot le le 11-10-2004 a 20:54:24
PS. En PHP, quelle est la différence entre les 'gillemets simples' et les "guillemets doubles" ?
|
|
le 2e ' ;D ;D et plus sérieusement : php ne les interprete pas pareil ... donc tu peux faire : echo ' <input type="nimportequoi">'; sans que php croie que le " est le 2e ' ... |
Titre: Re:redirection par cookie + php
Posté par: lab_siteweb le le 11-10-2004 a 21:57:59
Merci, cette fois ça marche même lors du 1er chargement! :)
Je dois encore améliorer quelque chose (désolé de vous prendre du temps, j'essaie de faire le plus par moi-même avec les tutos, mais il y a des points où je ne comprends pas le non-fonctionnement :'( ):
- lorsque je vais sur la page en français (qui se trouve à www.monsite.com/fr), le cookie est réglé à "fr".
- lorsque je veux retourner sur la page anglais (qui se trouve à www.monsite.com), je suis renvoyé directement à www.monsite.com/fr, ce qui est le but du cookie. Donc impossible de retourner à la page Anglais
- j'ai pensé à définir une variable [lang] (à ne pas confondre avec le cookie[lang]), qui est définie à "en" lorsqu'on clique sur le lien allant de la page français à la page anglais
Cependant, ça ne marche pas, voilà mon essai:
Code:
<?php // $lang = "en"; if (isSet($lang) && $lang=='en') { setcookie ('lang','en'); } ?>
|
|
Quand j'essai de définir ma variable "lang" dans le lien de la page Français href="../index.php?lang=en", ça ne marche pas. Par contre, si je met $lang = "en" au début de mon code (sur la page Anglais), tout fonctionne. Le problème doit venir de l'url... quelle est mon erreur ???
PS. merci de ta réponse bigornot ;)
|
Titre: Re:redirection par cookie + php
Posté par: erwinol le le 11-10-2004 a 22:04:40
test ce petit bout de code pour te rendre compte par toi-même :
Code:
<?php $maVariable = "Voici une chaine"; echo "Avec des \" : $maVariable"; echo 'Avec des \' : $maVariable';
?>
|
|
Bon je résiste pas à l'envie de t'en donner le résultat : dans le premier cas, la variable sera interpretée, il mettra donc "Voici une chaine" alors que dans le 2ème cas, il affichera $maVariable.
C'est une propriété héritée de PERL. |
Titre: Re:redirection par cookie + php
Posté par: MFred le le 11-10-2004 a 22:47:03
Et je te dirais ... heuresement que ca ne marche pas ... L'option "register_globals" doit être sur OFF (voir phpinfo() de ton hébergeur), aussi faut-il utiliser $_GET['nomdemavariable'] pour récupérer les variables transmises via URL ... > voir ce lien (http://frederic.bouchery.free.fr/?2004/08/17/11-VariablesAutodeclareesPourquoiCestMal).
Remplace donc ton code par : <?php if (isSet($_GET['lang']) && $_GET['lang']=='en') { setcookie ('lang','en'); } ?>
Et pour finir sur les "..." et '...' voici un peu de lecture ;) > http://frederic.bouchery.free.fr/?2004/08/10/9-EchoLapinOuTortue (http://frederic.bouchery.free.fr/?2004/08/10/9-EchoLapinOuTortue) |
Titre: Re:redirection par cookie + php
Posté par: lab_siteweb le le 12-10-2004 a 09:43:55
Merci à tous, vous m'avez fait bien avancé :D ;)
Voici le code de la page Anglais (qui fonctionne ;D )
Code:
<?php if (isSet($_GET['lang']) && $_GET['lang']=='en') //1) { setcookie ('lang','en'); //2) } else { if (isSet($_COOKIE['lang']) && $_COOKIE['lang']=='fr') { header ("Location: fr_index.php");} elseif (isSet($_COOKIE['lang']) && $_COOKIE['lang']=='de') { header ("Location: de_index.php");} else { if (isSet($_COOKIE['lang']) && $_COOKIE['lang']!='en') { setcookie ('lang','en');} } } ?>
|
|
Je me doute bien qu'il n'est pas forcément écrit dans les règles de l'art, avec tous ces "if" qui s'empilent, alors n'hésitez pas à faire des commentaires :)
J'aimerais encore améliorer quelque chose: comment efface-t-on le &lang=en de l'url (www.monsite.com/index.php?lang=en)?, j'ai essayer ça Code:
| if (isSet($_GET['lang'] && $_GET['lang']=='en') { unset($_GET['lang'] );}; |
|
et devinez quoi? Ca ne marche pas ;D :'(
J'aimerais placer ce code à l'endroit 2) dans la page Anglais, afin que le cookie ne se réécrive pas à chaque chargement de la page.
Une autre solution serait d'ajouter Code:
| if (isSet($_COOKIE['lang']) && $_COOKIE['lang']!='en') |
| à l'endroit 1), mais je préfère effacer la variable dans l'url. Où ske je me suis de nouveau planté ??? |
Titre: Re:redirection par cookie + php
Posté par: erwinol le le 13-10-2004 a 21:44:56
Pour la gestion d'un site multilingue, tu as également cette méthode :
http://www.phpdebutant.org/article107.php (http://www.phpdebutant.org/article107.php)
Je l'ai testée pour un client il y a quelques années et ça marchait nickel ! Cela dit, il y avait un problème dù au fait que les textes sont stockés dans des variables dans des fichiers langues : impossible de permettre à celui qui s'occupera de la maintenance de modifier les textes ... à moins qu'il veuille éditer les fichiers pour modifier le contenu des variables en faisant gaffe aux échappemements de caractères. |
Titre: Re:redirection par cookie + php
Posté par: lab_siteweb le le 14-10-2004 a 16:10:40
Merci pour le lien ;) J'utilise aussi include, mais en appelant des fichiers au lieu de variables. Je pense que les deux solutions doivent se valoir :) |
Titre: Re:redirection par cookie + php
Posté par: erwinol le le 14-10-2004 a 21:33:32
Avec des fichiers, tu peux faire une petite interface en ligne avec un éditeur WYSIWYG pour que le client puisse modifier lui-même le contenu du site.
Avec le système de variables ça devient très compliqué. |
Titre: Re:redirection par cookie + php
Posté par: lab_siteweb le le 15-10-2004 a 11:37:18
J'ai utiliser les constantes pour la page des produits, c'est super efficace dans ce cas là: pas besoins de modifier séparément la page dans toutes les langues. (A moins de faire un site complètement dynamique)
Pour les pages qui changent moins souvent, il vaut mieux utiliser des fichiers séparés, comme tu dis :) |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|