Jump to content

hookModuleRoutes


Recommended Posts

Bonjour,

Je suis en train de développer un nouveau module, et je souhaiterai personaliser l'URL.

Le module s'appelle modulebox, et le controller boxdetail

J'aimerai pouvoir acceder à la box 1 en écrivant : https://www.urldusite.com/boxdetail/1

J'ai implémenté une fonction hookModuleRoutes :

public function hookModuleRoutes()
{
return array(
            'module-modulebox-boxdetail' => array(
                                                    'controller' => 'boxdetail',
                                                    'rule' => 'boxdetail{/:id_box}',
                                                    'keywords' => array('id_box' => array('regexp' => '[0-9]+', 'param' => 'id_box'),),
                                                    'params' => array('fc' => 'module','module' => 'modulebox','controller' => 'boxdetail')
                                                 )
            );
}

 

Dans le function install j'ai mis : if ((!parent::install())&&(!$this->registerHook('ModuleRoutes'))) return false;

Pouvez vous me dire ou je peux me tromper ? car cela me renvoi une erreur 404.

Link to comment
Share on other sites

l'url devient donc module/modulebox/boxdetail/1

On peut éventuellement forcer l'url autrement mais c'est assez compliqué car on s'oppose au fonctionnement normal de PS. Je l'ai eu fait en 1.5/1.6 mais je doute (et n'ai pas l'envie de ) que cela fonctionnerai en 1.7. Et au moindre changement de version, ça ne fonctionnera surement pas

Link to comment
Share on other sites

@coeos.pro Non justement c'est module au singulier dans le cas d'une route

        'module' => array(
            'controller' =>    null,
            'rule' =>        'module/{module}{/:controller}',
            'keywords' => array(
                'module' =>        array('regexp' => '[_a-zA-Z0-9_-]+', 'param' => 'module'),
                'controller' =>        array('regexp' => '[_a-zA-Z0-9_-]+', 'param' => 'controller'),
            ),
            'params' => array(
                'fc' => 'module',
            ),
        ),

 

Edited by doekia (see edit history)
Link to comment
Share on other sites

.../boxdetail/1 Celles-ci non plus ne fonctionne pas tant que la route n'est pas enregistré via le hook  Hook::exec('moduleRoutes', array('id_shop' => $id_shop), null, true, false);

Hélas, nombre de fois ce hook est lancé trop tard. Il faut souvent bricoller avec des need_instance et autre misère de code

Link to comment
Share on other sites

sinon il y a https://github.com/PrestaShop/PrestaShop/blob/develop/classes/Link.php#L662 mais comme elle rajoute la langue dans l'url ça à tendance à donner un 404...

 

sinon 

'keywords' => array('id_box' => array('regexp' => '[0-9]+', 'param' => 'id_box'),),

ce ne serait pas plutot 

'keywords' => array('rewrite' => array('regexp' => '[0-9]+', 'param' => 'id_box'),),

 

edit:

avec

 'rule' => 'boxdetail{/:rewrite}',

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...