Jump to content

Crear nuevo hook y modificar modulo para usar un hook concreto


ivang
 Share

Recommended Posts

1. CREAR UN NUEVO HOOK

 

1. Hacer el insert que indica el manual de desarrollo:

INSERT INTO `ps_hook` (`name`, `title`, `description`) VALUES ('nombreDeMiHook', 'Nombre en el backoffice', 'Descripcion del hook para tenerlo documentado');

2. En el fichero $webroot/classes/FrontController.php buscar 'HOOK', verás algo similar a:

 

self::$smarty->assign(array(

'HOOK_HEADER' => Module::hookExec('header'),

'HOOK_TOP' => Module::hookExec('top'),

'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn')

));

 

if ((Configuration::get('PS_CSS_THEME_CACHE') OR Configuration::get('PS_JS_THEME_CACHE')) AND is_writabl {

// CSS compressor management

if (Configuration::get('PS_CSS_THEME_CACHE'))

Tools::cccCss();

 

//JS compressor management

if (Configuration::get('PS_JS_THEME_CACHE'))

Tools::cccJs();

}

 

self::$smarty->assign('css_files', $css_files);

self::$smarty->assign('js_files', array_unique($js_files));

self::$smarty->display(_PS_THEME_DIR_.'header.tpl');

}

 

public function displayFooter()

{

 

if (!self::$initialized)

$this->init();

 

self::$smarty->assign(array(

'HOOK_RIGHT_COLUMN' => Module::hookExec('rightColumn', array('cart' => self::$cart)),

'HOOK_FOOTER' => Module::hookExec('footer'),

'content_only' => (int)(Tools::getValue('content_only'))));

 

 

Hay dos bloques donde aparecen HOOK's, que se refieren parte inferior y parte superior de la página. En el bloque donde sea más adecuado tu hook, has de incluir en el array tu propio hook, por ejemplo:

 

self::$smarty->assign(array(

'HOOK_HEADER' => Module::hookExec('header'),

'HOOK_TOP' => Module::hookExec('top'),

'HOOK_NOMBREDEMIHOOK' => Module::hookExec('nombreDeMiHook'),

'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn')

));

 

Atención: {$HOOK_NOMBREDEMIHOOK} es el que utilizarás en los .tpl para incluir el contenido de tu hook donde corresponda, y NO TIENE PORQUE ser igual que el nombre en la tabla ps_hooks ('nombreDeMiHook'), pero por homogeneidoad y legibilidad recomiendo usar el mismo nombre pero en mayúsculas.

 

Con eso ya tenéis un nuevo hook funcionando correctamente en PS1.4.

 

2. HACER QUE UN (cualquier) MODULO UTILICE EL HOOK RECIEN CREADO (o cualquier otro que queráis)

 

Los modulos se desarrollan para enlazar a uno o varios hooks, según lo que el programador haya pensado para su utilización, por lo que en el php del módulo deberéis buscar 'function hook' y

encontraréis el primer hook al que el módulo se enlaza, por ejemplo:

 

 

function hookHome($params)

{

global $cookie;

 

Justo debajo de esa función, añadid una nueva funcion de enlace, pero esta vez será a vuestro nuevo hook (aquí si es importante que el nombre sea literalmente el que hayáis escrito en la tabla de hooks (nombreDeMiHook en este caso)

 

function hooknombreDeMiHook($params) { return $this->hookHome( $params ); }

 

 

El nombre de tu función de enlace es 'hook'+elnombredetuhook, y el $this->hookHome ha de ser, lógicamente, el nombre de la función de enlace original del módulo (hookHome en el ejemplo).

 

 

Luego recordar forzar la compilación y vaciar todas las cachés (navegador y smarty, etc y memcache, el que lo utilice) porque es posible volverse loco al ver que no aparece lo que debe aparecer en la página y no sabes por qué.

 

 

Darle las gracias a Tecniloco y a Ryouji por la info, yo solo la he comprobado, rejuntado, explicado y si hay algún error, es culpa mía :-)

 

Espero que os sirva la aportación, porque es algo bastante básico que hace falta y no está bien explicado en ningún sitio.

  • Like 1

Share this post


Link to post
Share on other sites

  • 4 weeks later...
  • 2 months later...
  • 2 months later...

Hola ivang.

Buenissimo tu post, estuve buscando esto por todos lados y el tuyo es el mas claro.

Me podrias aclarar una cosa:

Necesito incluir una modificacion en el archivo "\shop\themes\mi_tema\autentication.tpl", son unas lineas css, javascript y html para meterle un botón. Para no perder cambios en el futuro he decidido crear un módulo pero en la posicion donde necesito colocar ese elemento no hay hook.

La pregunta es ¿El paso dos ('HOOK_NOMBREDEMIHOOK' => Module::hookExec('nombreDeMiHook'),) tan solo crea el hook en si pero hasta que no se incluya ({$HOOK_NOMBREDEMIHOOK}) en el archivo tpl el modulo asociado no funcionara?

¿'HOOK_TOP' o 'HOOK_HEADER' tan solo son nombres asociados para identificar posicion, no para indicar posicion.?

Share this post


Link to post
Share on other sites

  • 4 months later...

Hola, llevo 2 días intentando crear un nuevo hook en ps1.5 sin resultados.

He leído muchos tutoriales y doc variada, pero no lo consigo.

No se muestran errores pero ahí donde debería imprimirse el contenido del hook sale espacio blanco.

En la consola de smarty el hook aparece listado pero sin valor asignado.

Share this post


Link to post
Share on other sites

Hola Susana.

Hace mucho que toqué el tema y creo que al final lo solucioné insertando el código dentro de la plantila. No recuerdo sí no he podido insertar el hook o era simplemente la opción más optima en mi caso.

Saludos

Share this post


Link to post
Share on other sites

  • 2 months later...
  • 2 weeks later...

Les comparto este otro tutorial, es muy bueno, ya lo seguí paso a paso y me sirvió mucho: http://www.luiscambr...prestashop-1-5/

 

Espero que les sirva.

 

A modo informativo *

 

El video del enlace que comentas, lo publico como aporte el mismo Luis en el foro, aquí: http://www.prestasho...-prestashop-15/, y esta agregado al indice de módulos en el foro.

Share this post


Link to post
Share on other sites

  • nadie locked this topic
Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More