Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 11-06-2007 14:55:32

guence
Membre
Date d'inscription: 11-06-2007
Messages: 15

Besoin d'aide avec le routage

Salut à tous,
J'ai du mal à définir le routage au niveau de mon application. J'aimerai pouvoir autoriser 2 langues pour mon site du genre:

-----> \\monsite/fr/Controllers/Actions              //pour le français
-----> \\monsite/en/Controllers/Actions            //pour la partie anglaise.

Le problème est que je ne sais pas comment faire le routage. J'ai test mainte fois mais j'ai toujours eu des erreurs.
Ou devrais je mettre les langues comme paramètres comme ceci:

-----> \\monsite/Controllers/Actions/fr              //pour le français
-----> \\monsite/Controllers/Actions/en            //pour la partie anglaise.

Merci de bien vouloir me donner un coup de main.


Plus tu regardes le ciel, plus tu y pense cool

Hors ligne

 

#2 11-06-2007 15:18:31

yannux
Membre
Lieu: Rennes
Date d'inscription: 07-04-2007
Messages: 284
Site web

Re: Besoin d'aide avec le routage

Je sais pas si tu a vue, peut être ce topic peut t'aider : http://www.z-f.fr/forum/viewtopic.php?id=178   ?
Bon courage wink


Société : Direct Info Service

Hors ligne

 

#3 18-06-2007 12:41:09

Aurelien
Membre
Date d'inscription: 22-03-2007
Messages: 11

Re: Besoin d'aide avec le routage

Je relance, car j'ai aussi des difficultés à mettre en place le routage de ce type.

-----> \\monsite/fr/Controllers/Actions              //pour le français
-----> \\monsite/en/Controllers/Actions            //pour la partie anglaise.

En suivant l'exemple de Philippe, j'ai aussi des erreurs, on peut avoir un exemple complet ?


$controller = Zend_Controller_Front::getInstance();
$router = new Zend_Controller_Router_Rewrite();
$router->addRoute(
    "basic",
    new Zend_Controller_Router_Route(
        "/:language/:controller/:action/:parameter1/:parameter2",
        array(
            "language"=>null,
            "controller"=>"index",
            "action"=>"index",
            "parameter1"=>null,
            "parameter2"=>null)
    )
);

Structure de l'application, noms de modules, et codes du fichiers index.php ?

Merci d'avance.

Hors ligne

 

#4 04-12-2007 18:57:16

Drake
Nouveau membre
Date d'inscription: 04-12-2007
Messages: 3

Re: Besoin d'aide avec le routage

Bonjour,

Je suis également intéressé par un exemple complet qui fonctionne.

Si possible comme suit :

- avec des routes avec la langue ou sans la langue, du genre :

$router->addRoute(
"language",
new Zend_Controller_Router_Route(
    "/:language/:controller/:action/*",
    array(
        "language"=>"fr",
        "controller"=>"index",
        "action"=>"index"
        )
    ),
array(
    "language"=>"fr|en|de",
    "controller"=>"index|auth|search"
    )
);

$router->addRoute(
"basic",
new Zend_Controller_Router_Route(
    "/:controller/:action/*",
    array(
        "controller"=>"index",
        "action"=>"index",
        "language"=>"fr"
        )
    ),
    array(
        "controller"=>"index|auth|search"
    )
);

Je ne sais pas si ces routes sont correctement déclarées.

- avec le code qui déclare les routes et dans quel fichier (bootstrap ? ailleurs ?)

- avec le code qui montre comment la langue est récupérée depuis l'URL

- avec le code qui montre comment le fichier de traduction est sélectionné,
en fonction de "fr" ou "en" ou "de" qui est présent dans l'url,
sinon en fonction de Zend_Locale::BROWSER,
sinon fr par défaut.

- avec un exemple de code dans une vue qui affiche un message dans la langue qui aura été détectée.

Merci d'avance.

Hors ligne

 

#5 05-12-2007 08:39:32

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Besoin d'aide avec le routage

Bonjour Drake,

Je n'ai pas le temps de t'extraire un exemple complet qui marche, mais, voilà quelques points assez précis :

- dans index.php avec le code ci-dessous, si ton URL est de la forme http://monsite/fr/ctrl/action/param1/param2, tu peux récupérer dans tes actions toutes les valeurs de l'URL (cf après)

Code:

$controller = Zend_Controller_Front::getInstance();
$router = new Zend_Controller_Router_Rewrite();
$router->addRoute(
    "basic",
    new Zend_Controller_Router_Route(
        "/:language/:controller/:action/:parameter1/:parameter2",
        array(
            "language"=>null,
            "controller"=>"index",
            "action"=>"index",
            "parameter1"=>null,
            "parameter2"=>null)
    )
);

- dans ton action, pour récupérer un de ces paramètres il te suffit d'utiliser $this->_getParam. Voilà un exemple :

Code:

class IndexController extends Zend_Controller_Action {
    public function indexAction() {
        $lang = $this->_getParam("language");
        $parameter1 = $this->_getParam("parameter1");
    }

Après on peut ajouter beaucoup de rafinements, mais il faut assez bien connaître le ZF :
==> Zend_Locale peut détecter la langue par défaut du navigateur

Code:

$locale = new Zend_Locale();
$browserLanguage = $locale->getLanguage(); // renvoie un code de 2 caractères genre "fr"

==> On peut rentre la langue disponible dans toutes les vues et mettre les traductions dans des fichiers à part
- regarder du coté de Zend_Translate (commence par les traductions CSV, c'est le format le plus simple)
- instancier sa vue dans le bootstrap et intégrer la langue dedans et éventuellement un mécanisme qui récupère facilement les résultats de Zend_Translate

Désolé de ne pas fournir un exemple de code complet, mais pour faire le tri dans un de mes codes pour fournir un code à peu près compréhensible, il me faudrait pas mal de temps et là je n'en ai pas du tout...

Bon courage,
Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#6 05-12-2007 10:29:56

Drake
Nouveau membre
Date d'inscription: 04-12-2007
Messages: 3

Re: Besoin d'aide avec le routage

Bonjour,

Philippe, merci pour ton message.
C'est un bon regroupement des éléments qui figurent dans différents sujets.

Cependant, au lieu de récupérer le paramètre "language" dans une action de controleur,
et donc dans chaque controleur s'il y en a plusieurs et qu'on change de page,
je souhaiterais récupérer ce paramètre dans le boostrap index.php,
afin de mettre en session la langue à afficher, à chaque appel d'une nouvelle page.

Comment peut-on faire ceci avec le ZF ?
Une autre personne a dis avoir utilisé un plugin, mais sans dire lequel ni détailler comment.
Auriez-vous un code simple et efficace pour le boostrap index.php ?

Merci d'avance

Dernière modification par Drake (05-12-2007 10:31:16)

Hors ligne

 

#7 05-12-2007 11:10:10

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Besoin d'aide avec le routage

re-bonjour,

Effectivement, je mets la langue en session aussi (en fait je mets la locale en session, mais ça revient au même). Dans mon bootstrap, j'ai un code du genre :

Code:

$languageList = array("en","fr");
$session = new Zend_Session_Namespace('monsite');
Zend_Registry::set("session",$session);
Zend_Registry::set("languageList",$languageList);
if (!isset($session->locale)) {
    $session->locale = new Zend_Locale();
    if (!in_array($session->locale->getLanguage(), $languageList)) {
        $session->locale->setLocale($languageList[0]);
    }
}

Après j'ai effectivement un helper (c'est un helper maison, c'est pas un des helpers du ZF) qui récupère la langue en session et qui l'injecte dans la vue et dans le controlleur. En gros dans le preDispatch de mon helper, j'ai :

Code:

        $session = Zend_Registry::get("session");
        $language = $session->locale->getLanguage();
        $this->getActionController()->language = $language ;
        $view = Zend_Registry::get("view"); // ma vue a été instanciée et mise dans la registry dans le bootstrap
        $view->language = $language;

donc là effectivement, après ce helper, tu as accès au language dans ton controller avec $this->language et dans ta vue (là ça dépend de ta vue pour la syntaxe).

Par contre même avec la langue en session, il est intéressant de garder la langue dans l'URL (après il faut faire attention que les 2 restent cohérent). Sinon les moteurs de recherche ne pourront parcourir qu'une des deux langues.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages