---
title: Pretty URLs para modulos — hookModuleRoutes
section: trucos
slug: module-routes
description: Como crear URLs amigables y personalizadas para los FrontControllers de un modulo PrestaShop usando el hook hookModuleRoutes, con slugs, IDs y parametros custom.
keywords: prestashop pretty urls modulo hookModuleRoutes routing SEO FrontController link
last_updated: 2024-12-01
source_url: "https://ayudaprestashop.es/trucos/module-routes"
---

# Pretty URLs para modulos — hookModuleRoutes

> Como crear URLs amigables y personalizadas para los FrontControllers de un modulo PrestaShop usando el hook hookModuleRoutes, con slugs, IDs y parametros custom.

Por defecto, las URLs de los FrontControllers de un modulo son del tipo `/index.php?fc=module&module=mymodule&controller=list`. El hook `moduleRoutes` permite definir **URLs amigables** como `/mi-seccion/lista` mejorando el SEO y la experiencia de usuario.

## Registrar el hook

*Registrar moduleRoutes en install()*

```php
<?php

public function install(): bool
{
    return parent::install()
        && $this->registerHook('moduleRoutes'); // DEBE estar en install
}
```

## Implementar hookModuleRoutes

*hookModuleRoutes — definicion de rutas*

```php
<?php

/**
 * Define las rutas Pretty URL del modulo.
 * Se ejecuta en CADA peticion — mantenerlo ligero.
 */
public function hookModuleRoutes(): array
{
    return [
        // Clave unica: module-{modulo}-{nombre}
        'module-mymodule-list' => [
            'rule'       => 'mi-seccion/lista',    // La URL publica
            'keywords'   => [],                    // Sin parametros dinamicos
            'controller' => 'list',                // controllers/front/list.php
            'params'     => [
                'fc'     => 'module',
                'module' => $this->name,
            ],
        ],
        'module-mymodule-page' => [
            'rule'       => 'mi-seccion/pagina',
            'keywords'   => [],
            'controller' => 'page',
            'params'     => [
                'fc'     => 'module',
                'module' => $this->name,
            ],
        ],
    ];
}
```

## Rutas con parametros dinamicos

*Rutas con ID y slug dinamicos*

```php
<?php

public function hookModuleRoutes(): array
{
    return [
        'module-mymodule-view' => [
            // {id} y {slug} son parametros capturados de la URL
            'rule'     => 'fichas/{id}-{slug}',
            'keywords' => [
                'id' => [
                    'regexp' => '[0-9]+',               // Solo numeros
                    'param'  => 'id',                   // $_GET['id']
                ],
                'slug' => [
                    'regexp' => '[_a-zA-Z0-9\-\.]+',   // Slug URL-safe
                    'param'  => 'slug',                 // $_GET['slug']
                ],
            ],
            'controller' => 'view',    // controllers/front/view.php
            'params'     => [
                'fc'     => 'module',
                'module' => $this->name,
            ],
        ],
        // URL resultante: /fichas/42-mi-producto-titulo
    ];
}
```

## Generar URLs desde PHP

*Generar Pretty URLs desde PHP con getModuleLink()*

```php
<?php

// getModuleLink('module', 'controller', $params)
$link = $this->context->link;

// Ruta simple sin parametros
$listUrl = $link->getModuleLink('mymodule', 'list');
// Output: https://tienda.com/mi-seccion/lista

// Ruta con parametros dinamicos
$viewUrl = $link->getModuleLink('mymodule', 'view', [
    'id'   => 42,
    'slug' => 'mi-producto-titulo',
]);
// Output: https://tienda.com/fichas/42-mi-producto-titulo

// Desde dentro del FrontController:
$url = $this->context->link->getModuleLink(
    $this->module->name,
    'list'
);
```

## Generar URLs desde Smarty

*Usar {url} en templates Smarty del modulo*

```smarty
{* URL del listado sin parametros *}
{url entity='module' name='mymodule' controller='list'}

{* URL con parametros *}
{url entity='module' name='mymodule' controller='view' params=['id' => $item.id, 'slug' => $item.slug]}
```

## Limpiar la cache de rutas

> **[!] Las rutas se cachean — limpiar tras cambios**
>
> PrestaShop cachea el sistema de rutas. Tras modificar `hookModuleRoutes`, debes limpiar la cache del front office desde el BO (Parametros avanzados > Rendimiento > Vaciar cache) o borrar `/var/cache/prod/` y `/cache/smarty/compile/`.

*Limpiar la cache desde CLI (PS 8/9)*

```bash
# Limpiar cache de Symfony (incluye rutas)
php bin/console cache:clear --env=prod

# Limpiar cache de Smarty (si hay templates cacheados)
rm -rf var/cache/prod/
rm -rf cache/smarty/compile/
```


---

*Fuente: [https://ayudaprestashop.es/trucos/module-routes](https://ayudaprestashop.es/trucos/module-routes). Version Markdown generada automaticamente para consumo por LLMs.*
