Skip to content

← Mòduls i desenvolupament

Hooks i overrides

Les dues maneres d'enganxar codi al nucli, quan fer servir cadascuna i els seus riscos.

5 slides 5 min de lectura
  1. PrestaShop · Mòduls

    Hooks i overrides

    Dues maneres d'intervenir el nucli, amb riscos molt diferents.

    PrestaShop · Mòduls i desenvolupament arlaf.dev
  2. Hooks, l'eina principal

    Un hook és un punt d'extensió que el nucli ofereix. N'hi ha de dos tipus.

    • display* — injecten HTML en un lloc de la pàgina.
    • action* — reaccionen a un esdeveniment (comanda, alta de client…).
    • Et registres al hook i PrestaShop et crida quan toca.
    PrestaShop · Mòduls i desenvolupament arlaf.dev
  3. Reaccionar a un esdeveniment

    public function install()
    {
        return parent::install()
            && $this->registerHook('actionValidateOrder');
    }
    
    public function hookActionValidateOrder($params)
    {
        $order = $params['order'];
        // enviar a un CRM, notificar, registrar...
    }
    
    PrestaShop · Mòduls i desenvolupament arlaf.dev
  4. Overrides, l'última opció

    Un override sobreescriu una classe o controlador del nucli sense editar-lo. És potent, però dos mòduls que sobreescriguin el mateix entren en conflicte.

    PrestaShop · Mòduls i desenvolupament arlaf.dev
  5. Hooks sempre que puguis; overrides només quan no hi ha cap hook que ho permeti.
    PrestaShop · Mòduls i desenvolupament arlaf.dev
Llegir la nota completa

Tard o d’hora voldràs que el nucli faci alguna cosa que de sèrie no fa. Hi ha dues maneres d’aconseguir-ho, i triar bé marca la diferència entre una botiga mantenible i una que es trenca sola.

Hooks: la via recomanada

Un hook és un punt d’extensió que el propi PrestaShop t’ofereix. N’hi ha de dos grans tipus:

  • display* — injecten HTML en un lloc concret (la home, la fitxa de producte, el checkout…).
  • action* — reaccionen a un esdeveniment del sistema (es valida una comanda, s’actualitza un estoc, es dóna d’alta un client…).

Et registres al hook a l’install() i implementes el mètode corresponent; PrestaShop ja et crida quan toca. És net, no toca el nucli i sobreviu a les actualitzacions.

Overrides: potents i perillosos

Un override sobreescriu una classe o un controlador del nucli sense editar-lo directament (els teus fitxers viuen a override/). És molt potent, però té un risc real: si dos mòduls sobreescriuen la mateixa classe, entren en conflicte i un dels dos deixa de funcionar. A més, dificulten el diagnòstic de bugs.

La regla

Hooks sempre que es pugui; overrides només com a últim recurs, quan no hi ha cap hook que permeti el que necessites. Si t’acostumes a buscar primer el hook adequat, els teus mòduls seran molt més robustos i conviuran bé amb els d’altres.