Jump to content

[résolu] Url Simplifiée pour module front controller


Recommended Posts

Bonjour à tous,

 

Je développe actuellement un module permettant de créer des pages en partant de plusieurs templates. Pour l'affichage de ces pages je passe par un front contrôleur de mon module avec un paramètre en GET pour définir la page à générer, exemple: www.urlsite.com/fr/modules/blog/page?page_id=1, celui-ci va ensuite afficher le bon template avec le contenu associé.

J'aurais aimé que l'utilisateur puisse choisir l'url simplifiée de sa page, comme www.urlsite.com/fr/blog/titre-de-ma-page

Le problème est que les réécriture d'url sous Prestashop sont gérées par une table "ps_meta" qui prend uniquement en compte le module à appeler et le contrôleur associé, je ne peux donc pas ajouter ce paramètre "page_id" en GET.. Je pourrais uniquement simplifié l'url de cette façon: www.urlsite.com/fr/blog/page?page_id=1 mais ce n'est pas ce que je souhaite.

image.png.4e4be784b281f0a1598629cab9fc1838.png

J'ai cherché du côté des routes Symfony mais j'ai du mal à voir comment l'intégrer sur un module front, l'idéal aurait été de créer une route Symfony prenant un paramètre dans l'url et appelant le contrôleur de mon module :

blog_list:
    path:       /blog/{page}
    controller: Modules\ModuleName\Controllers\Front\BlogController::view
    requirements:
        page: '\d+'

 

Quelqu'un aurait une solution pour créer cette route Symfony ou bien une solution alternative ?

 

Merci d'avance !

Julien

 

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

Problème résolu en passant par le hook moduleRoute :

    /**
     * Add module route
     */
    public function hookModuleRoutes()
    {
        $route = array(
            'module-module_name-moncontroler' => array(
                'controller' => 'moncontroler',
                'rule' => 'mapage/{:slug}',
                'keywords' => array(
                    'slug' => array('regexp' => '[_a-zA-Z0-9\pL\pS/.:+-]*', 'param' => 'slug'),
                ),
                'params' => array(
                    'fc' => 'module',
                    'module' => 'module_name',
                    'controller' => 'moncontroler',
                )
            ),
        );
        if (Tools::getValue('controller') != 'AdminModules') {
            return $route;
        }
    }

 

Link to comment
Share on other sites

  • Julien changed the title to [résolu] Url Simplifiée pour module front controller

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