Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-10-2008 00:21:57

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

[Résolu] extension .html dans les actions

Bonsoir,

J'ai fait un peu le tour du forum et en fait je cherche un exemple de router, si c'est la bonne méthode, qui me permettrait de récupérer quelque chose du genre www.toto.com/truc.html et de le traiter comme www.toto.com/truc et donc vers l'action trucAction() de mon IndexController.

J'ai vu qu'avec les router_regex on avait beaucoup de possibilité, mais seulement, je n'arrive à appliquer ça à l'ensemble des actions en une seule expression. Tous les exemples ciblent des action spécifiques.

Or moi j'aimerais router n'importe quelle action ***.html vers le même controller et la même action sans .html.

Si certains savent m'aider smile

Et pour préciser, je ne décide pas de garder les .html par caprice, c'est une refonte de site, et c'est pour éviter de rendre morts tous les liens qui se balladent déjà sur la toile et qui pointe vers des pages de l'ancien site smile (ce qui aurait un impact assez désastreux sur le positionnement du site dans les moteurs)

Merci,

A+ Benjamin.

Dernière modification par Delprog (08-10-2008 10:02:15)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#2 08-10-2008 08:32:50

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

Re: [Résolu] extension .html dans les actions

Bonjour,

J'ai eu le même problème que toi, pour le résoudre les routes n'ont pas suffit, j'ai utilisé un plugin qui gérait une partie du routage :
Dans mon bootstrap, j'avais en gros :

Code:

    $router->addRoute(
        "other",
        new Zend_Controller_Router_Route_Regex(
            '(.+)',
            array(
                'controller' => 'index',
                'action' => 'cms',
                'route' => 'other'
            ),
            array(
                1 => 'pageName'
            )
        )
    );

    $router->addRoute(
        "cms",
        new Zend_Controller_Router_Route_Regex(
            '(.+)\.php',
            array(
                'controller' => 'index',
                'action' => 'cms',
                'route' => 'cms'
            ),
            array(
                1 => 'pageName'
            )
        )
    );

Ensuite j'avais un plugin qui analysait ce paramètre "pageName" dans le routeShutdown (donc juste après le routage standard)

Code:

class Kitpages_MyProject_Plugin extends Zend_Controller_Plugin_Abstract {
    public function routeShutdown(Zend_Controller_Request_Abstract $request) {
        $allParams = $request->getParams();
        $route = $request->getParam("route",null);
        
        $pageName = $request->getParam("pageName",null);

        // correct pageName by adding index.php if needed
        if ($route == "other") {
            $pageName = $pageName."/index";
            $request->setParam("pageName",$pageName);
        }
                
        // check routing table and change controller and action if needed
        $mapping = array(
            "index" => "index|home",
            "loa/nos_vehicules" => "loa|vehicules"
            [...]
        );
        if (isset($mapping[$pageName])) {
            $tab = explode("|",$mapping[$pageName]);
            $request->setControllerName($tab[0]);
            $request->setActionName($tab[1]);
        }
    }
}

chez moi c'est des .php et pas .html, mais c'est pareil. La route "other" permet de gérer les noms de répertoire où il faut ajouter "/index.php" à la main (c'est la dernière route qui est prioritaire, donc si il y a .php, c'est bien la route "cms" qui est prise en compte...)

A+, Philippe


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

Hors ligne

 

#3 08-10-2008 10:00:22

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] extension .html dans les actions

Salut Philippe,

Merci pour ta réponse, entre je me suis aussi fait un plugin :

Code:

class MyLib_Plugin_Rout extends Zend_Controller_Plugin_Abstract
{
    public function __construct()
    {
        
    }
    
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {    
        $controller = $request->controller;
        $action = $request->action;
        $module = $request->module;
            
        $pos = strrpos($controller, '.html');        
        if ($pos === false) {
            $pos = strrpos($action, '.html');
            if (!($pos === false)) {
                $action = substr($action, 0, $pos);                
                $request->setModuleName($module);
                $request->setControllerName($controller);
                $request->setActionName($action);            
            }                                
        }
        else {            
            $action = substr($controller, 0, $pos);
            $controller = 'index';            
            $request->setModuleName($module);
            $request->setControllerName($controller);
            $request->setActionName($action);        
        }
        
        //die('module : ' . $module . ' / controller : ' . $controller . ' / action : ' . $action);                        
    }
}

Bon c'est qu'un début, maintenant je dois gérer les actions avec paramètres.


Après d'un point de vue propreté, je ne sais pas, ta solution est sans doute meilleure smile


A+ benjamin.

Dernière modification par Delprog (08-10-2008 10:03:23)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

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