Crear un nuevo hook en prestashop 1.6


Vamos a explicar lo más sencillamente posible cómo crear un nuevo hook personalizado para nuestro proyecto en prestashop.

1. Modificación de la base de datos.

Esto podemos hacerlo gráficamente mediante phpmyadmin, por ejemplo, o mediante comandos mysql de consola. Nosotros lo vamos a hacer por consola.

Lo primero creamos el nuevo hook en la tabla ps_hook, con el prefijo que cada uno tenga.

$ mysql -u MI_USUARIO -p

mysql> USE MI_BASE_DATOS;

mysql> INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES (‘nuevoHook’, ‘TITULO_HOOK’, ‘DESCRIPCION’);

Una vez hecho esto ya tenemos disponible nuestro nuevo hook.

2. Sacar el hook en el template.

Hay 2 formas de hacer que el hook se muestre en el template.

2.1. Declararlo directamente en el .tpl (Recomendado)

La forma más sencilla de sacar el hook es a través del template, no tocamos el núcleo de prestashop y directamente en el tpl que queramos pondríamos los siguiente:


{hook h='nuevoHook'}

2.2. A través del Controller

En la segunda forma tendríamos que ir al controlador que queramos que saque el módulo, pongamos que va a estar en todas las páginas así que iriamos al fichero, classes/controllers/FrontController.php y en la función initContent cargamos nuestro nuevo hook:


 $this->context->smarty->assign(array(
                'HOOK_HEADER'       => Hook::exec('displayHeader'),
                'HOOK_TOP'          => Hook::exec('displayTop'),
                'HOOK_NUEVO_HOOK'      => Hook::exec('nuevoHook'),
                'HOOK_LEFT_COLUMN'  => ($this->display_column_left  ? Hook::exec('displayLeftColumn') : ''),
                'HOOK_RIGHT_COLUMN' => ($this->display_column_right ? Hook::exec('displayRightColumn', array('cart' => $this->context->cart)) : ''),
            ));

Ahora sólo quedaría ir al tpl y mostrar el hook, para ello nosotros vamos a usar /themes/default-bootstrap/header.tpl y en la posición del tpl donde queramos que aparezcan los módulos pondremos esto:


{if isset($HOOK_NUEVO_HOOK)}{$HOOK_NUEVO_HOOK}{/if}

3. Preparar un módulo para poder transplantarlo a mi nuevo hook.

En prestashop cada módulo debe registrar los hooks a los que puede transplantarse, si no se registran nos dará el típico error de “este módulo no puede transplantarse…” , cada módulo tiene un archivo php que se llama igual que la carpeta que lo contiene y es donde se registran los hooks.

En nuestro ejemplo vamos a hacer que el módulo de menú superior salga por nuestro hook en vez de por el hook normal que es displayTop. Para ello vamos a /modules/blocktopmenu/blocktopmenu.php y buscamos la función hookDisplayTop, ya que esa función es la encargada de mostrar el módulo en su posición natural será la misma función a la que llamemos en nuestro hook. Ahora creamos una nueva función llamada como nuestro hook y precedida de la palabra hook, en nuestro caso:


public function hookNuevoHook($params) {
     return $this->hookDisplayTop($params);
}

Con esto ya sólo quedaría ir a posiciones de los módulos desenganchar el módulo Menú horizontal superior del hook displayNav y engancharlo a nuestro nuevo hook.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *