Jump to content
EnZZoooOOO

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.

Share this post


Link to post
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

Share this post


Link to post
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)

Share this post


Link to post
Share on other sites
10 minutes ago, EnZZoooOOO said:

https://www.urldusite.com/module/modulebox/boxdetail/1 ne fonctionne pas

je faisait référence à cette url.

 

A mon  avis il faut rajouter un htaccess dans le module si ceci fonctionne : boxdetail?id_box=1 et pas boxdetail/1

Share this post


Link to post
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

Share this post


Link to post
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}',

Share this post


Link to post
Share on other sites

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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More