Skip to content

← Modules and development

Hooks and overrides

The two ways to plug code into the core, when to use each and their risks.

5 slides 5 min read
  1. PrestaShop · Mòduls

    Hooks and overrides

    Two ways to reach into the core, with very different risks.

    PrestaShop · Modules and development arlaf.dev
  2. Hooks, the main tool

    A hook is an extension point the core offers. There are two kinds.

    • display* — inject HTML at a place on the page.
    • action* — react to an event (order, customer signup…).
    • You register on the hook and PrestaShop calls you when due.
    PrestaShop · Modules and development arlaf.dev
  3. Reacting to an event

    public function install()
    {
        return parent::install()
            && $this->registerHook('actionValidateOrder');
    }
    
    public function hookActionValidateOrder($params)
    {
        $order = $params['order'];
        // enviar a un CRM, notificar, registrar...
    }
    
    PrestaShop · Modules and development arlaf.dev
  4. Overrides, the last resort

    An override replaces a core class or controller without editing it. It's powerful, but two modules overriding the same thing collide.

    PrestaShop · Modules and development arlaf.dev
  5. Hooks whenever you can; overrides only when no hook makes it possible.
    PrestaShop · Modules and development arlaf.dev
Read the full note

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.