Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 01-09-2009 12:57:05

dev-k
Membre
Lieu: Barcelona
Date d'inscription: 18-07-2009
Messages: 77
Site web

[Résolu][1.9.0][Zend_Controller_Router_Route]Module non trouvé

Bonjour,

Je voudrais m'essayer aux sites multilingues
J'aimerais avoir une url du type http://www.monsite.com/langue/module/controller/action
J'ai vu un tutoriel qui explique comment gérer le multilingue de cette manière
http://www.m4d3l-network.com/2009/06/29 … rk-projectJ'ai donc fait de même et mis en place les routes ainsi que le plugin qui se charge de charger les traductions en fonction de la langue dans l'url, et s'assure qu'il y a toujours une langue par défaut quand on ne spécifie rien dans l'url (http://www.monsite.com par exemple)

Code:

resources.router.routes.defaultmodule.type = Zend_Controller_Router_Route_Module
resources.router.routes.defaultmodule.abstract = On    
resources.router.routes.defaultmodule.defaults.module = "default"
resources.router.routes.defaultmodule.defaults.controller = index
resources.router.routes.defaultmodule.defaults.action = index

resources.router.routes.language.type = Zend_Controller_Router_Route
resources.router.routes.language.route = ":language"
resources.router.routes.language.reqs.language = '^(fr|es)$'
resources.router.routes.language.defaults.language = "fr"

resources.router.routes.default.type = Zend_Controller_Router_Route_Chain
resources.router.routes.default.chain = "language, defaultmodule"

Code:

class App_Controller_Plugin_Multilanguage extends Zend_Controller_Plugin_Abstract
{
    public function routeStartup (Zend_Controller_Request_Abstract $request)
    {
        if (substr($request->getRequestUri(), 0, -1) == $request->getBaseUrl()){
            
            $request->setRequestUri($request->getRequestUri()."fr"."/");
            $request->setParam("language", "fr");        
        }
    }
 
    public function routeShutdown (Zend_Controller_Request_Abstract $request)
    {
        $language =  $request->getParam("language", "fr");
        switch ($language) {
            case 'fr':
                $locale = new Zend_Locale('fr');
                break;
            case 'es':
                $locale = new Zend_Locale('es');
                break;
            default :
                $locale = new Zend_Locale('fr');
                break;
        }        
        
        $translate  = new Zend_Translate('gettext', APPLICATION_PATH . '/languages/' . $locale . '/default.mo', $locale);
        Zend_Registry::set('Zend_Translate', $translate);
        Zend_Controller_Router_Route::setDefaultTranslator($translate);
    }
}

D'autre part j'utilise un autre plugin pour pouvoir changer le layout en fonction du module.

Code:

class App_Controller_Plugin_ModuleSwitcher extends Zend_Controller_Plugin_Abstract
{
    protected $_view = null;
 
    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $moduleName = $request->getModuleName();
        Zend_Layout::startMvc();
        $layout = Zend_Layout::getMvcInstance();  
        $layout->setLayoutPath('../application/modules/' . $moduleName . '/layouts')->setLayout($moduleName);
 
        $view = new Zend_View();
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
        $viewRenderer->init();      
         
        $this->_view = $viewRenderer->view;
        $this->_view->setEncoding('UTF-8');
        $this->_view->doctype('XHTML1_TRANSITIONAL');
        $this->_view->headTitle()->setSeparator(' - ')->append('Mon site');
        $this->_view->headMeta()->setHttpEquiv('content-type', 'text/html; charset=utf-8')
                    ->setHttpEquiv('lang', 'fr');
        return $request;
    }
}

Or j'ai le message d'erreur suivant:
Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script '.phtml' not found in path (..\application\modules\\layouts\;..\application\modules\\layouts\;

autrement dit le nom du module n'a pas été trouvé.
Quand je fais un var_dump de l'objet request, on voit effectivement
que le module, le controlleur et l'action sont nulles, or j'aimerais qu'elles soient respectivement à default, index, index.

Sachant que si je désactive les routes, évidemment les paramètres sont bons mais le résultat n'est pas bon puisque que je n'ai pas un site multilingue

Quelqu'un a t-il une idée du fait que les paramètres sont vides et comment y remédier??

Bonne journée,

Dernière modification par dev-k (11-11-2009 21:10:43)

Hors ligne

 

#2 02-09-2009 12:15:08

dev-k
Membre
Lieu: Barcelona
Date d'inscription: 18-07-2009
Messages: 77
Site web

Re: [Résolu][1.9.0][Zend_Controller_Router_Route]Module non trouvé

C'est bon j'ai trouvé il m'a fallu rajouter

Code:

resources.router.routes.language.type = Zend_Controller_Router_Route
resources.router.routes.language.route = ":language"
resources.router.routes.language.reqs.language = '^(fr|es)$'
resources.router.routes.language.defaults.language = "fr"
resources.router.routes.language.defaults.module = default
resources.router.routes.language.defaults.controller = index
resources.router.routes.language.defaults.action = index

A+

Hors ligne

 

#3 18-11-2009 00:37:51

citronbleu-v
Membre
Lieu: Béziers ou Arles
Date d'inscription: 03-02-2009
Messages: 79
Site web

Re: [Résolu][1.9.0][Zend_Controller_Router_Route]Module non trouvé

ça marche bien toi ? je suis obligé de mettre $this->url(array(...), 'default') pour que ça marche si je ne met pas défaut il bogue.

Dernière modification par citronbleu-v (18-11-2009 00:49:12)

Hors ligne

 

#4 18-11-2009 10:35:05

dev-k
Membre
Lieu: Barcelona
Date d'inscription: 18-07-2009
Messages: 77
Site web

Re: [Résolu][1.9.0][Zend_Controller_Router_Route]Module non trouvé

aucune idée je le fais d'une autre manière maintenant.
mais j'ai aussi un problème avec url

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