Cuando creamos un módulo que tiene un frontController nos encontramos muy limitados a la hora de crear las urls amigables, ya que solo podemos emplear el sistema de prestashop de SEO y URL en el que solo podremos tener acceso a una palabra clave, mientras que los parametros seguirán siendo con el interrogante y los iguales.
Por ejemplo. Nuestro módulo necesita dos parametros. La url básica sería así
latienda.dom/index.php?fc=module&module=nombremodulo&controller=nombrecontrolador?keyword1=gato&keyword2=perro
Esto no es nada amigable, y si empleamos el sistema del backoffice (SEO & URLS) esto mejora, pero no lo suficiente
latienda.dom/nombreamigabledelmodulo?keyword1=gato&keyword2=perro
Seguimos teniendo las palabras clave con signos de interrogación e iguales. Pero eso se puede cambiar. En sus versiones más recientes, prestashop incorpora un hook en el Dispatcher, el encargado de determinar las rutas amigables con parámetros incluidos. Al emplear esta herramienta, la url nos quedará de la siguiente forma:
latienda.dom/nombreamigabledelmodulo/gato/perro/
Para poder emplearlas en nuestro módulo debemos añadir la función
public function hookModuleRoutes() { return array( 'nombredelaregla' => array( 'controller' => "controladordelmodulo", 'rule' => 'nombreamigablemodulo/{keyword1}{/:keyword2}.html', 'keywords' => array( 'keyword1' => array('regexp' => '[a-zA-Z+]+', 'param' => 'nombredelparametro'), 'keyword2' => array('regexp' => '[_a-zA-Z0-9-_\pL]*', 'param' => 'nombredelparametro'), ), 'params' => array( 'fc' => 'module', 'module' => 'nombredelmodulo', 'controller' => 'controladordelmodulo', ), )); }
Ten en cuenta que deberás reemplazar ciertas palabras y nombres para que coincidan con los de tu módulo.
Y por supuesto, en la parte de la instalación del módulo
$this->registerHook('moduleRoutes')
IMPORTANTE
Lo que hace prestashop con esta regla es crear una expresión regular que debe coincidir con la ruta. Asegúrate que las expresiones regulares que hay para cada palabra clave funcionan correctamente y devuelven un valor.