Page 1 sur 1

Problème d'url rewriting sur site mutlilingue

Posté : 08 juin 2010, 09:30
par Ariochs
Bonjour. N'ayant pas eu de réponse dans la partie php débutant, je viens tenter ma chance ici ^^

Voulant changer le nom de mes pages (quand ces dernières sont en anglais) je me suis dit que j'allais faire un peu de Url rewriting. Seul problème, ça ne fonctionne qu'à moitié.

Imaginons que j'ai ma page fr du nom :
Actuellement si le visiteur choisi la langue anglais le lien passe à :
moi je veux qu'elle passe en
quand la personne à choisi l'anglais.

Du coup je fais dans mon .htaccess
RewriteRule ^folder/french\.php$ /dossier/francais.php?lang=en [L]
Cette méthode fonctionne bien, mais avant je pouvais passer d'une page fr en anglais (ou l'inverse) juste en cliquant sur mon drapeau, et du coup je récupérais le nom de la page en y ajoutant à la fin ?lang=fr ou ?lang=en de cette manière :
<a href="'.$url.'?lang=fr"><img src="../images/fr.png" alt="Drapeau Fran&ccedil;ais - French Fly" border="none" /></a> <a href="'.$url.'?lang=en"><img src="../images/en.png" alt="English Fly - Drapeau Anglais" border="none" /></a>
Avec $url qui est :
function url()
		{
			 return "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
		}


Sauf que la, vu que la page change de nom, une fois qu'elle est en anglais, je ne peux plus la repasser en fr (elle devient http://www.monsite.com/folder/french.php?lang=fr) .

(sur le coup je suis pas sur d'avoir expliqué clairement..)

Avez vous une idée pour corriger ce problème ?

Re: Problème d'url rewriting sur site mutlilingue

Posté : 08 juin 2010, 09:51
par AoSiX
Une solution serait un tableau qui contient tes liens...exemple :
$pages['en']['page1']='mypage.php'
$pages['en']['contact']='contactme.php'
$pages['fr']['page1']='mapage.php'
$pages['fr']['contact']='contactezmoi.php'
tu inclues ça dans toutes les pages, et pour appeler tes liens tu fais

<a href="<?php echo $pages[$lang]['contact']; ?>">xxxx</a>

En gros tu mets les URL des pages comme étant des simples ressources traduisibles.

Re: Problème d'url rewriting sur site mutlilingue

Posté : 08 juin 2010, 14:30
par Ariochs
Pas sur que ca fontionne.

Quand il clique sur le drapeau, vu que je venais à récuperer l'url pour y ajouter ?lang=xx comment faire maintenant pour qu'il sache quand il est sur tel ou tel page.

Avant j'avais ça :
<a href="'.$url.'?lang=fr"><img src="../images/fr.png"  alt="Drapeau Fran&ccedil;ais - French Fly" border="none" /></a>
avec $url :
function url()
                {
                         return "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
                }
Maintenant je devrais avoir un truc du genre
<a href="'.$pages[$lang]["contact"].'"><img src="../images/fr.png" alt="Drapeau Fran&ccedil;ais - French Fly" border="none" /></a>
Mais cette partie en gros pose problème ( $pages[$lang]["contact"] ), vu que mes drapeaux sont en include, du coup comment faire pour qu'il sache que c'est la page contact ou tart'en'pion ? Par exemple il suffit que je sois sur la page1en.php, ça viendra à me charger la page contact fr et non la page page1fr.php ...

Re: Problème d'url rewriting sur site mutlilingue

Posté : 08 juin 2010, 16:27
par Nours312
du coup comment faire pour qu'il sache que c'est la page contact
en fait, le mieux serait de faire une analyse de la page en cours (en début de page) pour savoir si tu est sur "contact", ou "page1"
ensuite, perso, je monterais le tableau en sens inverse, mais c'est question de gout ^^

et tu fais : $pages[$lang][$PageEnCours]

sachant que $PageEnCours à été déduite depuis une fonction qui fait un truc du genre :
foreach($pages as $page)
  foreach ($page as $name => $url)
    if($url == $_SERVER['SCRIPT_FILENAME'])
      return $name ;

bon, là ça marche pas !... mais ya l'idée ;)

@+

Re: Problème d'url rewriting sur site mutlilingue

Posté : 08 juin 2010, 16:44
par Ariochs
Merci pour votre aide, je vais essayer de faire ça prochainement, et si je n'y arrive pas je repasserais (d'habitude je suis plutôt dans la partie debutant php hihi, je suis pas très bon moi :D ).

Mais dans ton exemple, je n'aurais pas eu plutôt :
foreach($pages  as $page)
  foreach ($page as $PageEnCours=> $url)
    if($url == $_SERVER['SCRIPT_FILENAME'])
      return $PageEnCours;
et donc je fais :

$pages["fr"][$PageEnCours] pour le drapeau en fr
et
$pages["en"][$PageEnCours] pour le drapeau en anglais ?

Re: Problème d'url rewriting sur site mutlilingue

Posté : 08 juin 2010, 23:31
par Nours312
en faite, l'exemple que je t'ai donné doit être dans une fonction (d'où le return ^^) ... j'ai pas voulus mettre $PageEnCours, pour éviter la confusion ;)

Re: Problème d'url rewriting sur site mutlilingue

Posté : 09 juin 2010, 23:28
par dnnwm
Le mieux serait de faire pour l'ensemble de tes pages, ce genre de règles :

Code : Tout sélectionner

RewriteRule ^accueil/fr$ accueil.php?lang=fr RewriteRule ^accueil/en$ accueil.php?lang=en RewriteRule ^autrepage/fr$ autrepage.php?lang=fr etc...
Dans tes liens ensuite:

Si tu es sur la page "accueil/fr", $url sera égale à "accueil/" et tu pourra concaténer avec "fr" ou "en" en fonction du lien sur lequel l'utilisateur cliquera.

Re: Problème d'url rewriting sur site mutlilingue

Posté : 14 juin 2010, 10:58
par Ariochs
Bon me revoilà d'un long WE pour reprendre là ou je mettais arrêté (ce qui me fait peur car je comprends pas grand chose et je sens que je vais perdre le peu de cheveux qu'il me reste xD)

Donc j'ai un tableau que j'inclus de ce style (ou dans le sens inverse xD):
$pages['en']['page1']='mypage.php'
$pages['en']['contact']='contactme.php'
$pages['fr']['page1']='mapage.php'
$pages['fr']['contact']='contactezmoi.php'
Apres je fais appel à mes deux function :
function url()
		{
			 return "http://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
		}
function PageEnCours()
		{
foreach($pages  as $page)
 foreach ($page as $name => $url)
    if($url == $_SERVER['SCRIPT_FILENAME'])
      return $name ;
		}
Et sur mes drapeaux j'ai :

$pages[fr][$PageEnCours] pour mes pages en FR
$pages[en][$PageEnCours] pour mes pages en EN

Mais bon, ca me parait trop simple.. Que deviens mon $name ? Et j'ai surement oublié des trucs ?

Re: Problème d'url rewriting sur site mutlilingue

Posté : 14 juin 2010, 23:51
par Nours312
l'idée est là ... tu laisse tomber ta fonction url()

tu garde echo 'href="http://...'.$pages['fr'][PageEnCours($pages)].'" .. '; pour les pages en FR

et tu fais en sorte que la fonction PageEnCours($pages) { .... } te retourne bien ce que tu lui demande ;)

Re: Problème d'url rewriting sur site mutlilingue

Posté : 15 juin 2010, 11:59
par Ariochs
Le problème justement c'est que la fonction PageEnCours($pages) ne me retourne pas ce que je veux dans toute les manières que j'ai essayé.. Du coup ne trouvant pas la solution je fait un autre méthode.

Dans chaque page j'ajoute au début :
$name = $pages['fr']['exemple'];
$name2 = $pages['en']['exemple'];
Je n'oublie pas d'inclure mon tableau du genre :
$pages['fr']['exemple']='contactezmoi.php'
$pages['en']['exemple']='contactme.php'
Et au niveau des drapeaux j'ai :
<a href="'.$name.'"><img src="../images/fr.png" alt="Drapeau Fran&ccedil;ais - French Fly" border="none" /></a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.$name2.'"><img src="../images/en.png" alt="English Fly - Drapeau Anglais" border="none" /></a>
Par contre j'ai voulu le faire du genre :

Début de page :
$name = '\'exemple\'';
Et au niveaux des drapeaux :
<a href="'.$pages['fr'][$name].'">
<a href="'.$pages['en'][$name].'">
Mais ca n'a pas marché..

Pour ce qui est de ta solution du début je ne lâche pas l'affaire, mais je pense que je n'ai pas encore les compétences pour y arriver..

Re: Problème d'url rewriting sur site mutlilingue

Posté : 15 juin 2010, 22:48
par Nours312
slt ::

en fait lorsque tu fais : $name = '\'exemple\''; tu cré une chaine de caractère contenant \'exemple\' au lieu de exemple .. donc ça ne peux pas fonctionner ;)
mais en faisant : $name = 'exemple'; ça devrait aller ! :D

pour l'autre solution, le soucy viens bien de la fonction !... elle n'est pas bonne du tout :D et tu peux facilement t'en rendre compte en faisant :
function PageEnCours($pages){
  foreach($pages  as $page)
    foreach ($page as $name => $url){
      echo " $name => $url comparé avec :: {$_SERVER['SCRIPT_FILENAME']} \n";
      if($url == $_SERVER['SCRIPT_FILENAME'])
        return $name ;
    }
  return "la page encours n'est pas dans le tableau fournis !... ou cette fonction n'est pas bonne ! ";
}

$pages['en']['page1']='mypage.php';
$pages['en']['contact']='contactme.php';
$pages['fr']['page1']='mapage.php';
$pages['fr']['contact']='contactezmoi.php';

echo $pages['fr'][PageEnCours($pages)] ;

il va surement te falloir faire un peux de manipulation pour arriver au résultat souhaité ;)

@++