Demanar pressupostES
  1. Inici
  2. Guies
  3. Overrides o hooks a PrestaShop
PrestaShopActualitzat 7 min de lectura

Overrides a PrestaShop: riscos, hooks i com auditar-los

Un override canvia el nucli sense tocar-ne els fitxers, i per això és tan fàcil acumular-ne. Per què fallen en actualitzar, quines alternatives dona PrestaShop i com revisar els que ja té la teva botiga.

Portada de la guia: Overrides a PrestaShop: riscos, hooks i com auditar-los
Il·lustració editorial de la guia.

En resum

  • Un override substitueix un mètode sencer: les correccions del nucli en aquest mètode deixen d'executar-se.
  • Amb PHP 8 i versions noves, un canvi de signatura al nucli pot fer caure la pàgina.
  • Hooks, serveis decorats i classes pròpies cobreixen la majoria de casos sense sobreescriure el nucli.
  • Audita en una còpia: origen de cada override, diferències amb l'original i comanda de prova.

Els overrides a PrestaShop permeten substituir mètodes de les classes i els controladors del nucli sense editar els fitxers originals. Durant anys van ser la manera ràpida de canviar com es calcula un preu, quines dades demana el registre o què passa en desar una comanda, i moltes botigues n'acumulen força, uns instal·lats per mòduls i d'altres afegits a mà, que solen donar problemes en actualitzar. Repassem com funcionen, per què fallen en actualitzar, quines alternatives hi ha amb hooks i serveis i com auditar els que ja té la teva botiga.

Què és un override a PrestaShop

Les classes del nucli de PrestaShop es diuen, per exemple, ProductCore o CartCore, i la resta del codi fa servir Product o Cart. Si no hi ha override, Product és una extensió buida de ProductCore. Si crees un fitxer a la carpeta override/classes que defineix Product estenent ProductCore, PrestaShop fa servir la teva versió, i els mètodes que hi escriguis substitueixen els originals.

El mateix val per als controladors de la botiga i del back office, per a la classe principal d'un mòdul i per als seus controladors. Un mòdul pot portar els seus propis overrides: quan l'instal·les, PrestaShop en copia els mètodes a la carpeta override de l'arrel, i quan el desinstal·les els retira. Els que algú va posar a mà no tenen ningú que els retiri. PrestaShop desa a la memòria cau l'índex de classes, així que després d'afegir o treure un override cal buidar la memòria cau perquè es tingui en compte.

No s'ha de confondre amb sobreescriure plantilles de mòduls des del tema, que és una pràctica normal i es fa millor en un tema fill. Un override de PHP canvia la lògica del nucli; una plantilla al tema canvia el que es veu.

Per què els overrides fallen en actualitzar PrestaShop

Un override substitueix un mètode sencer. El més habitual és copiar el mètode original, canviar-ne dues línies i deixar la resta igual. A partir d'aquest moment la botiga executa la còpia, i qualsevol correcció que PrestaShop faci al mètode original, incloses les de seguretat, no s'arriba a executar mai. Res no avisa: la versió corregida del mètode simplement no es fa servir.

Altres errors sí que es veuen, i solen aparèixer després d'un canvi de versió:

  • La signatura del mètode canvia al nucli (paràmetres nous, tipus declarats) i l'override ja no és compatible. A PHP 8 això produeix un error fatal i la pàgina no carrega.
  • El mètode o la classe desapareixen o canvien de lloc, i l'override queda orfe o trenca la càrrega de classes.
  • Parts del back office han passat a Symfony. Un override d'un controlador antic d'una pàgina migrada deixa d'aplicar-se sense avisar, perquè la pàgina ja fa servir un altre codi.

A més, els overrides són exclusius. Si dos mòduls volen sobreescriure el mateix mètode, un dels dos no podrà instal·lar el seu override o algú acabarà fusionant-los a mà. Per això PrestaShop els desaconsella en mòduls que es distribueixen i no els admet als mòduls dels seus partners. A la guia per actualitzar PrestaShop sense trencar mòduls expliquem on encaixa la seva revisió dins del pla d'actualització.

Hooks: l'alternativa als overrides a PrestaShop

Els hooks són punts del codi on PrestaShop avisa els mòduls que passa alguna cosa o els demana contingut. N'hi ha de dues famílies. Els de visualització, com els de la fitxa de producte o la cistella, permeten afegir contingut en un lloc concret. Els d'acció es disparen abans o després d'un esdeveniment, com desar un objecte, validar una comanda o canviar-ne l'estat, i permeten executar lògica pròpia.

Molts overrides es van escriure per a coses que avui es resolen amb un hook. Imagina un override de la classe Customer que envia les dades de cada client nou a un CRM: el mateix s'aconsegueix amb un mòdul enganxat al hook que es dispara després de crear el client, sense tocar la classe. Si el CRM canvia, canvies el mòdul, i una actualització del nucli no l'afecta mentre el hook continuï existint.

A les pàgines del back office que ja fan servir Symfony hi ha hooks per modificar llistats i formularis, per exemple per afegir una columna al llistat de comandes o un camp al formulari de client. Per a la lògica que no té hook, la via documentada és proposar-lo al repositori del projecte o buscar un altre punt d'entrada; un override continua sent possible, però convé que sigui l'excepció i que estigui documentat.

Serveis de Symfony i classes pròpies en lloc d'overrides

A la part de PrestaShop que funciona amb Symfony, un mòdul pot declarar serveis als seus fitxers de configuració. Pot substituir un servei existent amb el mateix nom, o decorar-lo: el servei nou embolcalla l'original, que continua disponible per cridar-lo. La decoració és l'opció més segura, perquè només canvies el que necessites i la resta del comportament continua sent el del nucli.

Cal saber on funciona cada cosa. El back office migrat té accés al contenidor complet de Symfony, mentre que les pàgines de la botiga continuen fent servir controladors antics amb un contenidor més limitat. Un servei pensat per al back office no està disponible a la botiga si no es declara també per a ella.

Per a dades noves, la recomanació oficial és una taula pròpia amb la seva classe de model dins del mòdul, en lloc d'afegir camps a Product o Customer mitjançant un override. Així les dades del mòdul viuen al mòdul i s'instal·len i es desinstal·len amb ell. Si estàs valorant si et compensa un desenvolupament així, a PrestaShop: mòdul propi o comprat tens els criteris.

Com auditar els overrides de la teva botiga

L'auditoria es fa en una còpia de la botiga, no a producció. L'objectiu és saber què hi ha, d'on ve i què es pot treure abans de la propera actualització.

Com auditar els overrides de la botiga
  1. Llistatfitxers de la carpeta override i els seus mètodes
  2. Origenmòdul que el va instal·lar o canvi manual
  3. Comparaciódiferències amb el mètode original de la teva versió
  4. Decisiótreure, substituir per hook o documentar
  5. Provacòpia amb la memòria cau buidada i comandes completes

Per al llistat, revisa les subcarpetes d'override (classes, controladors i mòduls) i anota cada mètode sobreescrit. Per saber-ne l'origen, busca el mateix fitxer dins de la carpeta override de cada mòdul instal·lat. PrestaShop sol deixar un comentari amb el nom del mòdul damunt dels mètodes que instal·la, tot i que no sempre hi és i no convé refiar-se només d'això. El que no apareix a cap mòdul és manual, i és el que necessita més cura perquè ningú no recorda per què hi és.

Després compara cada mètode amb l'original de la teva versió i amb el de la versió a la qual vols actualitzar. Si l'override és una còpia amb un parell de línies canviades, ja saps què fa realment. A l'apartat de rendiment dels paràmetres avançats hi ha, segons la versió, una opció per desactivar tots els overrides. Activar-la a la còpia i repetir una comanda de prova mostra ràpidament què en depèn.

Amb aquesta informació, cada override acaba en un d'aquests destins:

  • S'elimina, perquè pertany a un mòdul desinstal·lat o fa una cosa que ja no es fa servir.
  • Se substitueix per un hook, un servei decorat o una classe pròpia dins d'un mòdul PrestaShop a mida.
  • Es manté de moment, amb una nota del que fa, per què no té alternativa i què cal revisar a cada actualització.

Després de cada canvi, buida la memòria cau i prova una comanda completa amb cada mètode de pagament i transportista. Si la botiga és multibotiga, prova també cada aparador.

Llista de comprovació abans de tocar els overrides de la teva botiga

  • Còpia de la botiga restaurada, protegida i desconnectada de pagaments reals, ERP i correus a clients.
  • Llistat d'overrides amb el seu mètode, el seu origen i la data en què es va afegir si se sap.
  • Comparació amb el nucli de la teva versió actual i de la versió de destinació.
  • Mòduls que instal·len overrides identificats, amb la seva versió i si encara es mantenen.
  • Alternativa decidida per a cada override: hook, servei, classe pròpia o mantenir-lo documentat.
  • Proves de comanda completes després de cada retirada.
  • Document final amb els overrides que es queden i per què.

Si vols que fem aquesta revisió amb tu, a manteniment PrestaShop comencem per aquest inventari abans d'actualitzar o de tocar cap mòdul.

Preguntes freqüents

Preguntes freqüents

Si la teva pregunta no és aquí, escriu-nos a info@whatmkt.com.

Puc esborrar la carpeta override per treure tots els overrides?

No ho facis a producció. Alguns mòduls depenen dels seus overrides i deixarien de funcionar, i d'altres hi guarden lògica de preus o de comandes. Prova-ho primer en una còpia, amb l'opció de desactivar overrides si la teva versió la té, i retira'ls un per un.

Un mòdul que instal·la overrides és mal senyal?

És un senyal per revisar-lo. Molts mòduls antics els feien servir perquè no hi havia cap hook per al que necessitaven, i alguns ja han publicat versions sense overrides. Pregunta a l'autor si hi ha una versió que faci servir hooks i si és compatible amb la versió a la qual actualitzaràs.

Què passa si dos mòduls sobreescriuen el mateix mètode?

Només un ho pot fer, així que el segon sol fallar en instal·lar-se o algú acaba barrejant els dos mètodes a mà. El resultat és un codi que cap dels dos autors no manté. El més assenyat és substituir-ne almenys un per un hook o per un desenvolupament propi.

Sobreescriure plantilles de mòduls al tema també és un override?

S'hi assembla pel nom, però és una altra cosa. Copiar la plantilla d'un mòdul al tema fill per canviar-ne l'HTML és una pràctica normal i no altera la lògica del nucli. Tot i això, convé revisar aquestes plantilles quan actualitzes el mòdul, perquè poden quedar desfasades.

El pas següent

T'ajudem a aplicar-ho a la teva botiga

Explica'ns què passa a la teva botiga i t'enviarem com ho abordaríem, l'abast i el pressupost. Si n'hi ha prou de configurar alguna cosa, t'ho direm.

Demanar valoració
O directament: info@whatmkt.comTelèfon: 643 369 869
Demanar pressupost TRUCAR