Child pages
  • Comprensión y uso de hooks

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

Comprensión y uso de hooks

Este artículo fue escrito por Julien Breux, y publicado el 5 de mayo de 2011 en el blog PrestaShop.

¿Qué es un “hook”?

Como se habrá dado cuenta, PrestaShop es un software que le permite crear módulos diseñados para interactuar directamente con el corazón de la muestra de soluciónes o eventos.

Los "hooks" le permiten recuperar estos eventos o cambiar la muestra.

Así que existen dos tipos distintos de "hooks".

  • "Hooks" de acción (los que le permiten, por ejemplo, enviar un e-mail cuando un cliente crea una cuenta de usuario)
  • "Hooks" de observación (los que le permiten, por ejemplo, mostrar un módulo en una columna)
Tip

A veces el "hook" de observación también puede servir como un "hook" de acción. Usted no necesita hacer nada para mostrarlos. Por ejemplo, usted puede hacer una tarea recurrente en la página de inicio con el "hook" "home".

Si tomamos el ejemplo del tema básico de PrestaShop, en la página principal, la solución utiliza "puntos de fijación" de la siguiente manera:

Nombre del Hook

Decripción

header

Hook del encabezado

top

Hook de la parte superior

leftColumn

Hook de la columna izquierda

home

Hook de la página de inicio

rightColumn

Hook de la columna derecha

footer

Hook del pie de página

Como puede ver, todos los "hooks" utilizados son "hooks de observación".

Esto significa que cada uno de sus módulos de forma independiente puede aferrarse a ellos y mostrar la información.

¿Cómo se utilizan?

En primer lugar, para usar correctamente el "hook", usted debe dirijirse a la clase de su módulo y crear un método no estático, público a partir de la palabra "hook" y el nombre del "hook" utilizado.
Entonces, sólo un argumento es pasado: la matriz de información de contexto diferente enviado al "hook".

Code Block
public function hookNameOfHook($params)
{
}

A continuación, es importante a la hora de instalar el módulo, adherirlo a varios "hooks" deseados . Para ello, utilice el método "registerHook", el cual sólo acepta un parámetro — el nombre del hook.

Code Block
public function install()
{
    return parent::install() && $this->registerHook('NameOfHook');
}
Tip

No hay necesidad de utilizar el método del módulo "uninstall" para eliminar el "hook".

Por último, es importante entender cómo llamar a estos "hooks" con el fin de crear otros nuevos más adelante.

Hay dos llamadas en PrestaShop para "hooks". La segunda llamada se basa en la primera.

La primera llamada es el método directo. Tiene dos argumentos: el nombre del "hook" y una matriz de información de contexto diferente.

Code Block
$params = array(
    'param_1' => 'value_1',
    'param_2' => 'value_2',
);
Module::hookExec('NameOfHook', $params);

La segunda llamada es un "acceso directo" a la primera para obtener una muestra "limpia" cuando realice la llamada. El conjunto de "accesos directos" están disponibles en la clase "hook".

Code Block
class HookCore extends ObjectModel
{
    // ...
    static public function updateProduct($product)
    {
        $params = array('product' => $product);
        return Module::hookExec('updateProduct', $params);
    }
    // ...
}

Llamar al "hook" denominado "updateProduct" será lo siguiente en el núcleo de PrestaShop.

Code Block
Hook::updateProduct(new Product(/* ... */));
Note

Hemos llamado a la clase "HookCore" utilizando "Hook" como el nombre de la clase. ¡Esto se debe al reemplazo!

¿Cómo agregar uno nuevo?

Si hasta ahora ha seguido el uso de "hooks" y cómo usarlos en PrestaShop, entonces usted seguramente se ha dado cuenta que le faltan algunos "hooks" como "MakeCoffe", "MakeFood" o "RespondToClientsForMe". ¡No entre en pánico!

Para crear su propio y pequeño "hook" personal, simplemente guarde una fila en la tabla de la base de datos "ps_hook" con el nombre de su "hook". (Vea 0 y 1 si es compatible con LiveEdit)

Code Block
INSERT INTO `ps_hook` (`name`, `title`, `description`)
               VALUES ('nameOfHook', 'Name Of Hook', 'It is a custom hook !');

¡Y, por último, sólo utilícelo como lo hemos hecho en este artículo!