🌐
Pretty URLs para modulos — hookModuleRoutes
Actualizado: 2024-12-01
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/
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.