TUTORIAL PARA CREAR HOOKS EN 1.4, PARA 1.5 ENTRAD AQUÍ
Si estáis modificando un Theme de Prestashop y necesitáis que uno o más módulos se puedan localizar en un nuevo espacio que hayáis creado necesitaremos generar nuevos hooks. O lo que es lo mismo, necesitamos indicarle a nuestra Base de Datos y programa que existe un nuevo espacio donde pueden ir colocados los módulos de nuestra tienda. En esta mini-guía os mostraré un poco como hacerlo.
Aquí os dejo el video-tutorial que he subido a YouTube para aclarar algo más las cosas. Espero que os guste:
1. – Crear el nuevo Hook en nuestra Base de Datos
Lo primero que debemos hacer es crear una nueva entrada para nuestro hook en la base de datos. Para ello, gastaremos la siguiente sentencia SQL:
INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES (‘NuevoHook’, ‘Mi Nuevo Hook’, ‘Este es el nuevo hook que estamos creando para la mini guia’);
*Nota: El prefijo gastado para la tabla es el básico que Prestashop. Modificadlo si fuera necesario. La información del hook se puede cambiar también conforme os venga mejor a vosotros.
2.- Especificar nuestro nuevo Hook en el código de prestashop
Hay que modificar el archivo /clases/FrontController.php. Buscaremos esta parte de código y añadiremos lo que está en rojo:
self::$smarty->assign(array(
‘HOOK_HEADER’ => Module::hookExec(‘header’),
‘HOOK_TOP’ => Module::hookExec(‘top’),
‘HOOK_NUEVOHOOK’ => Module::hookExec(‘NuevoHook’),
‘HOOK_LEFT_COLUMN’ => Module::hookExec(‘leftColumn’)
));
Hay que tener en cuenta que ‘HOOK_NUEVOHOOK’ será el nombre que después gastaremos en nuestros archivos .tpl. Da igual el nombre que le pongamos a esta, tan solo debe estar formado por ‘HOOK_+loquequieras’. Si quieres mantener la misma coherencia del resto de hooks, deberías ponerle el mismo nombre de la BD pero todo en mayúsculas. Ahora, eso si, el nombre dentro de la función debe ser exactamente el mismo que le hayáis puesto en la BD. Eso es, en mi caso Module::hookExec(‘NuevoHokk’).
Repito: {$HOOK_NUEVOHOOK} es el formato exacto que utilizarás en los .tpl para incluir el contenido del nuevo hook donde corresponda, y NO TIENE PORQUE ser igual que el nombre en la tabla ps_hooks (‘NuevoHook’), pero por homogeneidad y legibilidad recomiendo usar el mismo nombre pero en mayúsculas.
3.- Añadir la posibilidad de “engancharse” al nuevo Hook al módulo que queramos.
Para el ejemplo, modificaremos el módulo de Idiomas. Para que el módulo de idiomas pueda utilizar el nuevo hook debemos darle la funcionalidad. Para ello debemos modificar el código del archivo /modules/blocklanguages/blocklanguages.php. Buscamos la siguiente función:
function hookTop($params)
{
global $smarty;
$languages = Language::getLanguages();
[…]
}
Justo debajo de esa función, debéis añadir una nueva función, pero ésta hará referencia al nuevo hook (aquí si es importante que el nombre sea literalmente el que se haya escrito en la tabla de hooks (NuevoHook en este caso)
function hookNuevoHook($params) { return $this->hookTop( $params ); }
De esta forma, le daremos la funcionalidad necesaria para que el BO de Prestashop nos deje mover el módulo al que le acabamos de dar funcionalidad al hook que hemos creado.
*Nota: Aunque para ejemplarizar hemos utilizado “function hookTop(…” del módulo de Idiomas, hay que tener en cuenta que se puede hacer exactamente lo mismo con cualquier módulo. Lo único es que dentro de la función nueva para nuestro hook debemos utilizar otra que ya exista en el archivo que estamos modificando, da igual que sea hookTop, que cualquier otra.
Espero que os haya sido de ayuda al minitutorial. Si tenéis alguna pregunta, podéis utilizar el contacto de mi web y tran pronto como me fuera posible os contestaría.