PrestaShop JS events to mechanizm, który pozwala reagować na to, co dzieje się w sklepie bez przeładowania strony – dodanie produktu do koszyka, zmianę kombinacji, odświeżenie listy produktów przez AJAX. Wszystko opiera się na globalnym obiekcie prestashop dostępnym w front office oraz metodach emit() i on(), których szukaj w core.js i w theme.js motywu. Poniżej znajdziesz listę najważniejszych zdarzeń, gotowe wzorce podpięcia listenerów, sposób emisji własnych eventów z modułu i procedurę debugowania. Szerszy kontekst wdrożeniowy znajdziesz na naszej stronie o PrestaShop.

Czym są PrestaShop JS events i gdzie działają

W front office PrestaShop od wersji 1.7 działa globalny obiekt prestashop. To event bus oparty na wzorcu publish/subscribe: jeden fragment kodu (core, moduł albo motyw) emituje zdarzenie, a inne fragmenty się w nie wpinają. Nic nie trzeba instalować — obiekt jest dostępny na każdej podstronie sklepu razem z metodami emit() i on(). Najprostszy test: otwórz konsolę przeglądarki na karcie produktu i wpisz typeof prestashop. Jeśli zwróci object, mechanizm jest dostępny; jeśli undefined, Twój motyw go nie ładuje i żaden listener nie zadziała.

Kodu szukaj w plikach motywu — core.js oraz theme.js w motywie classic. Pełną listę zdarzeń w konkretnym sklepie zobaczysz, wyszukując w katalogu motywu frazę prestashop.emit. Zdarzenia dotyczą tego, co dzieje się bez przeładowania strony, czyli przede wszystkim ruchu AJAX-owego:

Dwie rzeczy warto wiedzieć, zanim cokolwiek podepniesz. Po pierwsze, mechanizm jest ten sam w PrestaShop 1.7 i 8, ale lista konkretnych zdarzeń i kształt przekazywanych danych zależą od motywu i modułów — nie istnieje jedna uniwersalna lista, która zadziała w każdym sklepie. Po drugie, motywy zbudowane na page builderach albo mocno przerobione potrafią nie emitować nic poza zdarzeniami z core. Dlatego test na docelowej instalacji jest obowiązkowy, a nie opcjonalny. Przy wdrożeniach PrestaShop sprawdzamy to w pierwszej kolejności, bo od wyniku zależy, czy integrację da się w ogóle napisać w rozsądnym czasie.

Najważniejsze zdarzenia JS w PrestaShop – tabela i zastosowania

Poniższe pięć zdarzeń pokrywa większość wdrożeń, z jakimi mamy do czynienia: odświeżenie koszyka, karta produktu, lista produktów, quick view i fasety. Nazwy są standardowe dla motywu classic, ale przed użyciem potwierdź je w kodzie swojego motywu.

ZdarzenieKiedy się odpalaTypowe zastosowanie
updateCartPo dodaniu, usunięciu lub zmianie ilości w koszyku, także z minikoszykaOdświeżenie własnego licznika lub komunikatu, wysłanie zdarzenia add_to_cart do GA4 / dataLayer
updatedProductPo zmianie kombinacji, ilości lub ceny na karcie produktuPrzeliczenie własnych elementów UI, zdarzenie select_item lub view_item
updateProductListPo odświeżeniu listy produktów przez AJAX (filtry, sortowanie, paginacja)Ponowne podpięcie skryptów, przepisanie linków, zdarzenie view_item_list
clickQuickViewPo kliknięciu szybkiego podglądu produktuZdarzenie view_item dla modala, inicjalizacja skryptów wewnątrz modala
updateFacetsPo aktualizacji filtrów fasetowychOdświeżenie listy i liczników, pomiar użycia filtrów

Jak nasłuchiwać zdarzeń: prestashop.on() w praktyce

Podpięcie listenera to kilka linijek, ale dwie pułapki potrafią zjeść pół dnia pracy. Pierwsza: obiekt prestashop tworzy theme.js, więc jeśli Twój skrypt załaduje się wcześniej, w zmiennej będzie undefined. Druga: callback wykonuje się przy każdym zdarzeniu, także wtedy, gdy akurat nie chcesz nic robić.

document.addEventListener('DOMContentLoaded', function () {
  if (typeof prestashop === 'undefined' || typeof prestashop.on !== 'function') {
    return;
  }

  prestashop.on('updateCart', function (event) {
    console.log('updateCart', event);
    // tu Twoja logika, np. odświeżenie własnego licznika
  });
});

Jeżeli theme.js ładuje się z opóźnieniem, sam DOMContentLoaded nie wystarczy — sprawdzenie wypadnie na undefined i listener nigdy się nie podepnie. Rozwiązania są dwa: doładować własny plik JS po theme.js (na przykład przez registerJavascript modułu z pozycją bottom) albo poczekać na obiekt w krótkiej pętli.

function whenPrestashopReady(callback) {
  if (typeof prestashop !== 'undefined' && typeof prestashop.on === 'function') {
    callback();
    return;
  }
  setTimeout(function () { whenPrestashopReady(callback); }, 50);
}

Praktyczne zasady, które oszczędzają problemów na produkcji:

Jeśli i tak planujesz zmiany w warstwie frontu, zrób je razem z decyzją o motywie — pisaliśmy o tym w artykule o tym, jak wybrać i wdrożyć motyw PrestaShop.

Jak emitować własne zdarzenia i łączyć je z modułem

Własne zdarzenie to najczystszy sposób, żeby moduł i motyw wymieniały dane bez dotykania plików core. Schemat jest zawsze taki sam: PHP rejestruje skrypt i przekazuje konfigurację, JavaScript nasłuchuje, a moduł w odpowiednim momencie wywołuje prestashop.emit('nazwaZdarzenia', dane).

1. Rejestracja skryptu w module. W metodzie hookDisplayHeader() dodaj plik JS przez addJS(), a dane z PHP przekaż przez Media::addJsDef():

public function hookDisplayHeader()
{
    $this->context->controller->addJS($this->_path.'views/js/mymodule.js');
    Media::addJsDef([
        'mymodule' => [
            'ajaxUrl'   => $this->context->link->getModuleLink('mymodule', 'ajax'),
            'threshold' => (float) Configuration::get('MYMODULE_THRESHOLD'),
        ],
    ]);
}

2. Emisja zdarzenia. W pliku JS modułu, po udanej akcji AJAX:

prestashop.emit('mymodule:cartThreshold', { step: 50, reached: true });

3. Odbiór w motywie. W theme.js albo w skrypcie ładowanym z child theme:

prestashop.on('mymodule:cartThreshold', function (payload) {
    var bar = document.querySelector('#free-shipping-bar');
    if (bar) { bar.style.width = payload.step + '%'; }
});

4. Data-atrybuty zamiast zmiennych globalnych. Gdy dane dotyczą konkretnego elementu (próg darmowej dostawy, ID produktu), wypisz je w szablonie: <div id="mymodule-widget" data-threshold="299"></div> i czytaj w JS przez document.getElementById('mymodule-widget').dataset.threshold. Praktyczna zaleta: działa też przy doczytywaniu fragmentów przez AJAX, bo dane jadą razem z HTML-em.

Trzy zasady, które oszczędzają godziny: prefiksuj nazwy zdarzeń nazwą modułu (mymodule:), bo bez tego łatwo o kolizję z motywem; emituj tylko po sprawdzeniu typeof prestashop !== 'undefined'; nie edytuj core ani motywu nadrzędnego — logikę trzymaj w module lub w child theme, co opisujemy przy okazji wyboru i wdrożenia motywu PrestaShop. Szerszy obraz wdrożeń PrestaShop znajdziesz w naszym hubie.

Debugowanie JS events krok po kroku

Zanim zaczniesz grzebać w kodzie, ustal dwie rzeczy: czy zdarzenie w ogóle leci i czy Twój listener jest zarejestrowany w momencie jego emisji. Najszybciej zrobisz to, podmieniając metody event busa na wersje logujące.

(function () {
    var emit = prestashop.emit.bind(prestashop);
    prestashop.emit = function (name, data) {
        console.log('[emit]', name, JSON.parse(JSON.stringify(data || {})));
        return emit(name, data);
    };
    var on = prestashop.on.bind(prestashop);
    prestashop.on = function (name, cb) {
        console.log('[on]', name, cb);
        return on(name, cb);
    };
})();

Kluczowa jest kolejność: snippet musi wykonać się przed rejestracją listenerów motywu, czyli przed theme.js. W DevTools zapisz go jako Snippet i uruchom z włączonym „Disable cache”, albo tymczasowo doładuj własnym modułem w hookDisplayHeader().

Loguj pełny obiekt, nie sklejony string. console.log('[emit]', name, data) pokazuje obiekt rozwijany leniwie — po kliknięciu w konsoli zobaczysz stan z momentu rozwijania, a nie z momentu emisji. Dlatego w snippecie siedzi JSON.parse(JSON.stringify(...)): dostajesz zamrożoną kopię payloadu i widzisz dokładnie, co poleciało.

Breakpoint w Sources. Event Listener Breakpoints tu nie zadziała — to nie zdarzenia DOM, tylko własny bus PrestaShop. Otwórz DevTools → Sources, wciśnij Ctrl+Shift+F i wyszukaj prestashop.emit lub fragment nazwy zdarzenia, np. updateCart. Kliknij w numer linii, żeby ustawić breakpoint, i przejdź przez dodanie produktu do koszyka. Ten sam trik działa dla callbacku — breakpoint w linii z function (payload) {.

Wyłącz minifikację i cache. W PrestaShop: Zaawansowane → Wydajność → wyłącz CCC (Combine, Compress and Cache) oraz cache szablonów i kompilacji. W DevTools: Network → Disable cache, z panelem otwartym przez cały test. Jeśli front stoi za CDN, wyczyść też cache po stronie Cloudflare czy LiteSpeed. Bez tego oglądasz zminifikowany kod sprzed zmian.

Gdzie szukać emisji. themes/<twoj_motyw>/assets/js/theme.js, themes/core.js oraz modules/*/views/js/*.js. W wersjach produkcyjnych szukaj po fragmencie nazwy zdarzenia, nie po spacjach. Nazwy zdarzeń i konwencje frontowe opisuje dokumentacja deweloperska PrestaShop.

KrokCo robiszGdzie
1Podmień emit() i on() na wersje logujące nazwę i payloadSnippet w DevTools, uruchomiony przed theme.js
2Ustaw breakpoint w linii emisji albo w callbackuDevTools → Sources → Ctrl+Shift+F: prestashop.emit
3Wyłącz CCC, cache szablonów i cache przeglądarkiPrestaShop → Zaawansowane → Wydajność; DevTools → Network → Disable cache
4Sprawdź, czy motyw w ogóle emituje dane zdarzeniethemes/<motyw>/assets/js/theme.js, modules/*/views/js/*.js

Najczęstsze pułapki i jak je wykryć

1. Zdarzenie nie odpala, bo motyw go nie emituje. Najczęstsza przyczyna w sklepach na motywie custom: ktoś wyciął fragment theme.js. Sprawdź Ctrl+Shift+F w DevTools frazą prestashop.emit('updateCart'. Jeśli w całym załadowanym froncie nie ma ani jednego wystąpienia, żaden listener nie zadziała — trzeba dopisać emisję we własnym module po swojej akcji AJAX.

2. Listener dodany przed załadowaniem prestashop. Objaw: Uncaught TypeError: Cannot read properties of undefined (reading 'on') albo brak reakcji, gdy skrypt modułu wykona się przed core.js. Rejestruj listener w DOMContentLoaded i sprawdzaj typeof prestashop. Kolejność ładowania kontroluj parametrami addJS() w swojej wersji PrestaShop — a jeśli nie jesteś pewien, oprzyj się na zdarzeniu DOM i nie zgaduj.

3. Duplikaty listenerów po kolejnych żądaniach AJAX. Jeśli rejestrujesz listener wewnątrz funkcji obsługującej odpowiedź, każde dodanie produktu do koszyka dokłada kolejny callback. Wykryjesz to licznikiem: window.__hits = (window.__hits || 0) + 1; w środku callbacku. Trzy kliknięcia i licznik pokazuje 3 zamiast 1 — masz duplikat. Rejestruj raz, poza funkcją AJAX, albo zabezpiecz flagą.

4. Cache i minifikacja ukrywają zmiany. Klasyk: „w pliku mam poprawkę, w przeglądarce stary kod”. Sprawdź cztery miejsca: CCC w PrestaShop, cache szablonów, CDN (Cloudflare) i Service Worker z modułu PWA. Szybki test — dopisz ?v=123 do adresu pliku i sprawdź w Network, czy wraca nowa wersja.

5. Różnice między 1.6, 1.7, 8 i motywami custom. PrestaShop 1.6 opierał się na jQuery i ajaxCart, 1.7 i 8 używają event busa z core.js. Motyw custom bywa forkiem theme.js z 1.7 wklejonym do sklepu na 8 — wtedy payload zdarzenia może się różnić od tego, czego oczekujesz. Nigdy nie zakładaj zgodności, porównaj emisję w Sources. Przy planowaniu aktualizacji warto śledzić wydania PrestaShop.

PułapkaTypowy objawSzybkie sprawdzenie
Motyw nie emituje zdarzeniaListener zarejestrowany, zero reakcjiCtrl+Shift+F w DevTools: prestashop.emit('nazwa'
Listener przed prestashopTypeError: ... reading 'on'typeof prestashop w konsoli przed DOMContentLoaded
Duplikaty po AJAXJedna akcja wywołuje callback 2-5 razyLicznik wywołań w callbacku + logi [on] ze snippetu
Cache i minifikacjaStary kod mimo zmian w plikuSources: czy widzisz swój komentarz? Network: nagłówki cache
Różnice wersji i motywówPayload inny niż w dokumentacji motywuPorównaj emit w swoim core.js i theme.js

Wydajność, bezpieczeństwo i SEO przy JS events

Event bus jest wygodny, ale każdy listener wykonuje się w tym samym wątku, w którym przeglądarka renderuje stronę. Jeśli w handlerze odpalasz zapytanie AJAX albo przeliczasz całą listę produktów, użytkownik dostaje opóźnioną reakcję na klik, a Google liczy to jako gorszy Core Web Vitals (INP). Trzy zasady, które stosujemy w każdym wdrożeniu:

Sprzątanie listenerów. Modal, quick view czy widget doklejany AJAX-em może zniknąć z DOM, a listener zostaje. Zanim podepniesz kolejny, zapisz referencję do handlera i wywołaj odpowiednik off() — zweryfikuj nazwę w core.js, bo część motywów nadpisuje ten plik. Jeśli off() nie ma, użyj flagi: w handlerze sprawdzaj document.contains(element) i przerwij, gdy węzła już nie ma.

Nie blokuj renderowania. Nie odpalaj ciężkich obliczeń w momencie kliknięcia „Dodaj do koszyka”; przenieś je po pierwszej klatce. W motywie klienta sprawdź, co dokłada się do theme.jswybór i wdrożenie motywu wpływa tu bardziej niż sam kod core. Testuj DevTools → Performance (Long tasks powyżej 50 ms) i dane polowe w Search Console.

SEO. Ceny, nazwy i dostępność kombinacji muszą być w HTML. Treści generowane wyłącznie przez JS po interakcji użytkownika (klik w filtr, doładowanie listy) Google może nigdy nie zobaczyć. Nie traktuj eventów jako źródła treści, tylko jako warstwę wygody.

Typ zdarzeniaPrzykład w sklepieMechanizmWartość startowa
Wpisywanie tekstupodpowiedzi w wyszukiwarce, filtrydebounce300 ms
Scroll, resize, mousemovesticky header, lazy loadthrottle / requestAnimationFrame1 wywołanie na klatkę
Aktualizacja koszyka, odświeżenie listy produktówAJAX po akcji użytkownikadebounce + wspólny render250 ms
Klik, otwarcie quick viewpojedyncza akcjabez opóźnień0 ms

Checklista wdrożeniowa i co dalej

Poniżej kolejność, którą stosujemy przy każdej zmianie w eventach — od debugowania do produkcji.

  1. Debug na kopii. Pracuj na stagingu z klonem bazy i plików. Na czas testów wyłącz CCC (Zaawansowane parametry → Wydajność) i cache Smarty; przy włączonej kompresji JS stack trace w konsoli pokazuje linie z pliku zbiorczego, nie z theme.js.
  2. Sprawdź liczbę emisji. Podepnij w konsoli tymczasowy nasłuch i policz wywołania przy jednym kliknięciu. Jeśli ten sam handler odpala się trzy razy, masz podwójne podpięcie — typowe, gdy kilka modułów ładuje własny skrypt na różnych hookach.
  3. Test na motywie classic. Jest w paczce 1.7 i 8.x i daje szybką odpowiedź, gdzie leży problem. Jeśli działa tam, a nie działa na motywie klienta, szukaj w theme.js i plikach nadpisanych w katalogu motywu.
  4. Test na motywie klienta. Te same akcje: dodanie do koszyka, zmiana kombinacji, filtr, quick view — desktop i mobile. Nie poprzestawaj na classicu.
  5. Deploy i monitoring. Wgraj pliki z wersjonowaniem (parametr ?v= przy skryptach), wyczyść cache Smarty i przeglądarki, włącz CCC z powrotem. Przez dobę obserwuj konsolę błędów i raport Core Web Vitals.

Po wsparcie zgłoś się, gdy zdarzenie emituje się z plików core, moduł nadpisuje core.js, sklep stoi na 1.6 lub starszym, albo nie masz stagingu do bezpiecznego testu. Nazwy metod i sygnatury zdarzeń weryfikuj w dokumentacji deweloperskiej PrestaShop, zakres prac i stawki opisujemy w cenniku wdrożeń PrestaShop, a punktem startowym jest nasza strona o PrestaShop.

EtapCo sprawdzaszNarzędzieKryterium zaliczenia
Debugczy zdarzenie leci i ile razyDevTools → Console / Sourcesdokładnie 1 emisja na akcję
Stagingte same akcje na kopii sklepustaging z wyłączonym cachezero błędów w konsoli
Motywyclassic vs motyw klienta i mobilepodmiana motywuidentyczne zachowanie
Produkcjadeploy, wersjonowanie, cacheCCC + cache Smartybrak regresji przez 24 h

Najczęstsze błędy i jak je wykryć

Listener podpięty, zanim obiekt prestashop istnieje. Skrypt dodany w złym miejscu (np. inline w head) wykonuje się szybciej niż theme.js i wtedy prestashop.on() rzuca błąd.

Jak wykryć: W konsoli pojawia się „TypeError: Cannot read properties of undefined (reading 'on')” albo „prestashop is not defined”, a żaden listener się nie rejestruje.

Jak naprawić: Owiń kod guardem: if (typeof prestashop !== 'undefined') { ... }, a samo podpięcie wykonaj po załadowaniu theme.js lub w DOMContentLoaded.

Założenie, że dane zdarzenie jest emitowane przez motyw. Część szablonów i motywów custom nie odpala wszystkich eventów znanych z classic, a do tego dochodzą moduły, które nadpisują szablony.

Jak wykryć: Przechwytujesz prestashop.emit i logujesz nazwy – Twoje zdarzenie nigdy nie pojawia się na liście, mimo że akcja w sklepie wykonuje się poprawnie.

Jak naprawić: Przeszukaj theme.js oraz pliki modułów pod kątem frazy prestashop.emit i sprawdź, czy dana akcja w ogóle idzie przez AJAX. Jeśli nie – podepnij się pod zdarzenie DOM albo dodaj własny emit w child theme.

Duplikaty listenerów po kolejnych żądaniach AJAX. Ten sam kod rejestruje handler przy każdym odświeżeniu listy produktów lub koszyka, więc jedna akcja wywołuje callback kilka razy.

Jak wykryć: W logu jedna akcja (np. dodanie do koszyka) generuje 2–3 wpisy zamiast jednego albo licznik wywołań rośnie z każdym kliknięciem.

Jak naprawić: Zdejmij stary handler przed dodaniem nowego (prestashop.off z tym samym handlerem) albo dodaj flagę blokującą ponowną rejestrację. Utrzymuj jedną nazwaną funkcję zamiast anonimowej.

Opieranie logiki na konkretnych polach payloadu bez sprawdzenia, co faktycznie przychodzi. Struktura obiektu zdarzenia bywa różna między wersjami PrestaShop i między motywami.

Jak wykryć: W callbacku event.reason, event.resp lub inne pole jest undefined, choć zdarzenie odpala się poprawnie.

Jak naprawić: Zaloguj cały obiekt: console.log('updateCart', event) i dopiero potem odczytuj pola. Dodaj zabezpieczenia na brak wartości, zamiast zakładać stały kształt danych.

Cache i minifikacja JS ukrywają zmiany. Plik na serwerze jest nowy, ale przeglądarka nadal wykonuje złączony i skompresowany pakiet sprzed edycji.

Jak wykryć: W DevTools w Sources widzisz stary kod, mimo że plik na serwerze został zmieniony. Zmiany działają tylko w trybie incognito.

Jak naprawić: Wyłącz czasowo łączenie i kompresję JS w panelu wydajności, wyczyść cache sklepu i przeglądarki, odśwież z pominięciem cache. Po testach włącz optymalizację ponownie.

Modyfikacja plików core lub theme.js z motywu nadrzędnego. Wszystko działa do pierwszej aktualizacji PrestaShop albo motywu, po której zmiany znikają.

Jak wykryć: Po aktualizacji funkcjonalność przestaje działać, a w plikach core.js/theme.js nie ma Twojego kodu. Brak wpisu w repozytorium projektu.

Jak naprawić: Przenieś logikę do child theme albo do własnego modułu, który rejestruje JS przez hookDisplayHeader i addJS. Core i motyw nadrzędny zostaw nietknięte.

Lista kontrolna do odklikania

Podsumowanie

PrestaShop JS events to najprostszy sposób na reakcję na akcje AJAX bez przeładowania strony, ale ich działanie zależy od motywu i modułów konkretnej instalacji. Kluczowe jest sprawdzenie, co faktycznie jest emitowane, i podpięcie listenera po załadowaniu theme.js. Wszystkie zmiany rób w child theme lub własnym module, nigdy w plikach core. Payload zdarzenia loguj w całości, bo jego struktura bywa różna między wersjami i szablonami.

Najczęściej zadawane pytania

Czy PrestaShop JS events działają tak samo w wersjach 1.7 i 8?

Mechanizm jest ten sam – globalny obiekt prestashop z metodami emit() i on(). Różnice dotyczą listy zdarzeń i ich payloadów, bo zależą od motywu i aktywnych modułów. Zawsze sprawdzaj emisję w plikach konkretnej instalacji, zamiast opierać się na liście z dokumentacji.

Gdzie znajdę kod źródłowy, który emituje zdarzenia?

Najczęściej w theme.js motywu oraz w plikach modułów w katalogu modules. Sam mechanizm busa siedzi w core.js, ale konkretne zdarzenia biznesowe emituje warstwa motywu i modułów. Przeszukanie projektu frazą prestashop.emit daje pełną listę w kilka minut.

Czy mogę dodawać własne zdarzenia z modułu?

Tak. W JS wywołujesz prestashop.emit('nazwaZdarzenia', dane), a w motywie lub innym skrypcie odbierasz je przez prestashop.on(). Skrypt rejestruj z modułu przez hook hookDisplayHeader i metodę addJS, żeby nie dotykać plików core. Nazwy zdarzeń ustal z zespołem, bo przy kilku modułach łatwo o kolizje.

Dlaczego moje zdarzenie nie odpala się po dodaniu produktu do koszyka?

Najczęstsze przyczyny to brak emisji w motywie, listener dodany przed załadowaniem theme.js oraz cache z minifikacją, który serwuje starą wersję JS. Sprawdź kolejność ładowania skryptów w DevTools i przechwyć prestashop.emit, żeby zobaczyć, jakie zdarzenia faktycznie lecą. Jeśli akcja nie idzie przez AJAX, żadne zdarzenie nie zostanie wyemitowane.

Czy JS events mają znaczenie dla SEO?

Pośrednio tak. Zmiany nasłuchujące na zdarzeniach wpływają na responsywność strony, a Google ocenia to przez INP w ramach Core Web Vitals. Jeśli treści lub linki powstają wyłącznie w JS, robot może ich nie zobaczyć – warto czytać wytyczne o treściach przyjaznych użytkownikom. Zasada jest prosta: dane krytyczne dla indeksowania muszą być w HTML.

Czym różnią się JS events od hooków PHP w PrestaShop?

Hooki PHP działają po stronie serwera i zmieniają wygenerowany HTML lub logikę aplikacji. JS events działają w przeglądarce i pozwalają reagować na akcje już po wczytaniu strony, najczęściej te wykonywane przez AJAX. W praktyce często używa się obu: hook przygotowuje dane, a zdarzenie JS obsługuje interakcję.

Jak szybko sprawdzić, czy zdarzenie jest w ogóle emitowane?

Nadpisz tymczasowo prestashop.emit funkcją, która loguje nazwę zdarzenia i payload, a potem wywołuje oryginał. Wykonaj akcję w sklepie i patrz w konsolę. Jeśli nic się nie pojawia, problem jest po stronie emisji, a nie Twojego listenera. Dokumentacja deweloperska PrestaShop jest dobrym punktem startowym: devdocs.prestashop-project.org.

Jeśli w Twoim sklepie zdarzenia JS nie odpalają się tak, jak powinny, albo chcesz je wykorzystać do integracji z zewnętrznym systemem – napisz do nas. Sprawdzimy motyw, moduły i wersję PrestaShop, zanim cokolwiek zmienimy.

Źródła i materiały