Bonjour, ma question est la suivante : Comment éviter de perdre les variable $_GET de ma méthode lorsque je change la langue. En effet, je développe un site multi-lingue et tout les systèmes de recherche sont des formulaires qui sont transmis au contrller via la méthode GET.

Le soucis est que lorsque je change de langue, je perds toutes les variables GET et donc plus de résultats pour ma recherche.
Faut-il ajotuer des règles au niveaux .htaccess ? Faut-il ajouter des règles dans le router ?

Merci d'avance.

Cordialement,

Devil

4 réponses


The-Devil
Auteur
Réponse acceptée

Finalement j'ai trouvé la solution, il me suffisait de modifier mon lien comme ceci:

<?php echo $this->Html->link('DE', array('language' => 'deu',  '?' => $this->params->query)+$this->params['pass']);?> 

En espérant que ça pourra être utile à quelqu'un :)

Hello,
Personnellement quand un visiteur veut changer la langue (n'importe ou sur le site) il a sous la main un petit menu déroulant (Element) qui permet de choisir une langue. Quand on clic sur une langue on est redirigé vers une action d'un controller spécifique (pour moi : Langs > change ($lang_code) qui ne dispose pas d'une vue ) Dans cette fonction je fais des vérifications, je mets à jour le 'Config.Language' et je mets à jour un cookie ainsi que la bdd si c'est une user loggé. A la fin de cette action je redirige le visiteur :

    return $this->redirect($this->referer());

Ce qui renvoie directement à la page ou était le visiteur avant d'être redirigé vers l'action de changement de lang. Ainsi on conserve toutes les variables passées en GET et la page est rafraîchie dans la bonne langue aux yeux du visiteur.

Hello, alors comment fonctionnerait ta méthode ? Car je fais les choses comme ceci: J'ai un lien pour changer la langue

<?php echo $this->Html->link('DE', array('language' => 'deu')+$this->params['pass']); ?>

Lors du clique, la langue change et l'utilisateur est redirigé vers la page ou il était. Sauf qu'il n'y a plus de $_GET.
J'ai basé mon système d'internationalisation sur le tutoriel de Grafikart sur le sujet.

Hello,
dans mon Element (menu qui liste les langs dispo) j'ai des liens qui ont cette forme :

$this->Html->link($lang['name'], array('controller' => 'langs', 'action' => 'change', 'lang_code' => $lang['code'], 'admin' => false) );

Avec le routing qui va avec évidemment.
Puis ma fonction de changement de lang ressemble à ca :

    public function change($lang_code = null)
    {
            // on vérifie que $lang_code à la bonne forme
            // on vérifie l'existence de la lang dans la bdd

            // on met à jour le cookie
            // si c'est un User loggé, on met à jour la bdd
            // on affiche un FlashMessage pour dire ce qui c'est passé (succces ou error)

            // on renvoie vers la page précédente
            return $this->redirect($this->referer());
    }

Je te conseille de faire un debug de ton $this->referer(); pour voir si les variables GET sont présentes