Unable to install override PrestaShop: konflikt nadpisań i jak go rozwiązać

Komunikat „Unable to install override” w PrestaShop znaczy, że instalowany moduł chce nadpisać metodę klasy, którą już nadpisuje inny moduł albo stary plik w katalogu override. PrestaShop nie łączy dwóch nadpisań sam, więc przerywa instalację. Rozwiązanie to usunięcie osieroconego nadpisania albo ręczne połączenie kodu obu modułów, z kopią plików.

Autor: Zespół TellMyShop. Poradnik dla właścicieli sklepów PrestaShop: przyczyna, ręczna naprawa i to samo w rozmowie z czatem.
Aktualizacja: · 5 min czytania

Skąd bierze się konflikt nadpisań?

Nadpisanie (override) to plik, którym moduł podmienia fragment działania PrestaShop, na przykład sposób liczenia kosztu dostawy w koszyku. Przy instalacji PrestaShop kopiuje taki plik z folderu modułu do katalogu override sklepu. Przy odinstalowaniu go stamtąd usuwa.

Nadpisania są wyłączne. Jedna metoda jednej klasy może mieć tylko jedną podmienioną wersję. Dokumentacja dla developerów PrestaShop mówi wprost, że moduł z nadpisaniem może zablokować innym modułom zmianę tego samego zachowania. Dlatego twórcy PrestaShop zalecają nadpisania tylko we własnych modułach, a w modułach do sprzedaży wybierają haki.

Najczęstsze sytuacje, które kończą się tym komunikatem:

SytuacjaPo czym ją poznaszCo zwykle pomaga
Dwa moduły zmieniają tę samą metodęw komunikacie jest klasa i metoda, a w override leży plik z tą metodą od innego modułupołączenie kodu obu nadpisań w jeden plik albo rezygnacja z jednego modułu
Nadpisanie zostało po starym modulemodułu nie ma na liście, ale plik w override dalej ma jego kodusunięcie osieroconej metody z pliku, z kopią
Ponowna instalacja tego samego modułumoduł był odinstalowany z błędem i nie posprzątał po sobieusunięcie pozostałości, potem instalacja od nowa
Ręczna zmiana sprzed latplik w override bez komentarza o module, nikt nie pamięta, skąd jestustalenie z poprzednim developerem, co robi, zanim cokolwiek ruszysz
Stara pamięć podręczna klaspo usunięciu nadpisania błąd dalej wracawyczyszczenie pamięci podręcznej sklepu

Polski sklep z modułami PrestaShow opisuje w swojej bazie wiedzy ten sam schemat: zmiana nazwy istniejącego pliku, instalacja modułu, a potem ręczne połączenie dwóch plików. Radzi też włączyć na ten czas przerwę techniczną.

Jak rozwiązać „Unable to install override” krok po kroku

To zadanie dla twojego developera. Poniżej jest lista, którą możesz mu przekazać. Każdy krok zaczyna się od kopii, bo pliki w override zmieniają działanie całego sklepu.

  1. Zapisz pełny komunikat. Potrzebna jest nazwa klasy i metody. Bez nich developer zgaduje.
  2. Zrób kopię bazy i katalogu override. Najlepiej całego sklepu, a przynajmniej tego katalogu i folderu instalowanego modułu.
  3. Znajdź plik, który już nadpisuje tę metodę. Dla klasy Cart to zwykle override/classes/Cart.php. Nad metodą moduły często zostawiają komentarz z nazwą modułu i datą instalacji.
  4. Sprawdź, czy moduł-właściciel jest w sklepie. Jeśli go nie ma, metoda jest osierocona i można ją usunąć z pliku. Jeśli jest, kod obu modułów trzeba połączyć tak, żeby oba działały.
  5. Wyczyść pamięć podręczną. W Zaawansowane → Wydajność jest przycisk czyszczenia. PrestaShop odbuduje wtedy listę klas z nadpisaniami.
  6. Zainstaluj moduł jeszcze raz i sprawdź koszyk, dostawę albo inne miejsce, którego dotyczy nadpisanie. Zrób zamówienie testowe.

Przy szukaniu winowajcy przydaje się przełącznik „Wyłącz wszystkie nadpisania” w Zaawansowane → Wydajność. Dokumentacja funkcjonalna PrestaShop opisuje go jako włącznik wszystkich nadpisań klas i kontrolerów. Działa na cały sklep, więc używaj go krótko i najlepiej na kopii testowej.

Czego nie robić, gdy moduł się nie instaluje?

Kilka skrótów, które zamieniają jeden komunikat w większy kłopot:

  • Kasowanie pliku z override na ślepo. Moduł, który go dodał, przestaje działać bez żadnego komunikatu. Bywa, że chodzi o koszt dostawy albo rabat w koszyku.
  • Kopiowanie metody z jednego pliku do drugiego bez czytania. Dwie wersje tej samej metody w jednej klasie to błąd PHP i biała strona.
  • Edycja plików w folderze modułu. Zmiany znikną przy jego aktualizacji, a konflikt wróci.
  • Zostawienie wyłączonych nadpisań na stałe. Moduły, które ich potrzebują, działają wtedy tylko w połowie.

Jeśli po instalacji pojawił się błąd 500, zajrzyj do poradnika o błędzie 500 w PrestaShop. Treść błędu znajdziesz po włączeniu trybu debugowania.

Jak czat pomoże developerowi przy konflikcie nadpisań?

Twój czat (Claude albo ChatGPT) z modułem TellMyShop czyta sklep tak, jak zrobiłby to developer na pierwszym spotkaniu. W darmowej wersji TellMyShop Free widzi listę modułów z wersjami i dziennik błędów sklepu, więc pomoże ustalić, kiedy zaczął się problem. Pliki nadpisań i modułów czyta już tylko TellMyShop Pro, bez włączania przełączników.

Ty: Instalacja modułu dostawy kończy się komunikatem Unable to install override, metoda getOrderShippingCost w klasie Cart. Co z tym zrobić?

Twój czat: W pliku override/classes/Cart.php metodę getOrderShippingCost nadpisuje moduł darmowej dostawy. Ten moduł jest zainstalowany i włączony. Nowy moduł chce nadpisać tę samą metodę. Proponuję połączyć obie wersje: najpierw liczy nowy moduł, a próg darmowej dostawy działa jak teraz. Podgląd zmiany w pliku:

Zapis pliku w katalogu override wymaga przełącznika Serwis. Przed zapisem zrobię kopię pliku. Pokazać pełny kod developerowi do sprawdzenia?

Stan kartki: czeka na twoje „tak”
podgląd zmiany

stara wersja: public function getOrderShippingCost(...) { /* wersja modułu darmowej dostawy */ }

nowa wersja: public function getOrderShippingCost(...) { /* wersja połączona: nowy moduł + próg darmowej dostawy */ }

Ilustracja: produkty, liczby i odpowiedzi są przykładowe.

Nazwy modułów i kod w przykładzie są przykładowe. W prawdziwej rozmowie czat pokaże pełną treść metod, a nie skrót.

Co jest potrzebne do każdego kroku:

  • Czytanie plików override i modułów działa w TellMyShop Pro od razu, dla plików tekstowych do 1 MB.
  • Zmiana pliku w folderze modułu wymaga przełącznika Moduły, który działa 24 godziny.
  • Zmiana pliku w katalogu override sklepu to zakres przełącznika Serwis. Daje pełny dostęp techniczny, dlatego wyłącza się sam po 3 godzinach.
  • Ponowna instalacja modułu z paczki ZIP to znów przełącznik Moduły.

Oba przełączniki włączysz tylko wtedy, gdy wtyczka ma udaną kopię bazy z tego samego dnia. Przed każdym zapisem pliku powstaje jego kopia, a pliki PHP są sprawdzane pod kątem błędów składni. Każdą zmianę widzisz najpierw w podglądzie, zapis następuje po twoim „tak” i trafia do historii zmian. Większość zmian cofniesz, w tym plik przywrócony z kopii. Odinstalowania modułu cofnąć się nie da, dlatego czat najpierw proponuje wyłączenie.

Uczciwie: przy łączeniu kodu dwóch modułów czat pokaże przyczynę i projekt poprawki, ale za decyzję, czy połączona metoda robi to, czego oczekują oba moduły, odpowiada developer albo autor modułu. Podobny przykład znajdziesz w zastosowaniu poprawka błędu w kodzie modułu, a odczyt dziennika w zastosowaniu komunikaty błędów po aktualizacji modułu.

Jak uniknąć konfliktów przy kolejnych modułach?

Przed zakupem modułu zapytaj autora, czy używa nadpisań, a jeśli tak, to których klas. Moduły oparte na hakach rzadziej się kłócą. Przy instalacji trzymaj się kolejności z poradnika o instalacji modułu PrestaShop, a nieużywane moduły wyłączaj zamiast usuwać, dopóki nie masz pewności, że nic z nich nie korzysta.

Zanim zaczniesz porządki w modułach, możesz sprawdzić sklep w darmowej wersji TellMyShop Free. Pełny odczyt plików i zapis z kopią działa w TellMyShop Pro, ceny są w cenniku.

Pytania i odpowiedzi

Co dokładnie znaczy komunikat Unable to install override?

PrestaShop próbuje skopiować plik nadpisania z instalowanego modułu do katalogu override sklepu i trafia na metodę, którą już zmienia inny plik. Dwa moduły nie mogą nadpisać tej samej metody tej samej klasy, więc instalacja się zatrzymuje. W komunikacie zwykle jest nazwa klasy i metody, na przykład Cart i getOrderShippingCost.

Czy ten błąd psuje sklep, który już działa?

Zwykle nie. Instalacja nowego modułu się nie kończy, a sklep działa tak jak przed próbą. Kłopot zaczyna się wtedy, gdy ktoś próbuje go obejść na siłę, na przykład kasując plik z katalogu override bez sprawdzenia, czyj on jest.

Czy mogę po prostu usunąć plik z katalogu override?

Tylko gdy wiesz, że należy do modułu, którego już nie ma w sklepie. Jeśli plik należy do działającego modułu, ten moduł przestanie robić to, do czego służy, na przykład liczyć dostawę po swojemu. Najpierw sprawdź, który moduł dodał nadpisanie, i zrób kopię pliku.

Czy TellMyShop sam naprawi konflikt nadpisań?

TellMyShop Pro pozwala czatowi przeczytać oba nadpisania, wskazać kolidującą metodę i przygotować połączony plik w podglądzie. Zapis pliku w katalogu override wymaga włączenia przełącznika Serwis na 3 godziny, a przed zapisem powstaje kopia pliku. Decyzję, jak połączyć kod dwóch modułów, warto jednak zostawić developerowi albo autorowi modułu.

PrestaShop jest zastrzeżonym znakiem towarowym PrestaShop SA. Claude jest znakiem towarowym Anthropic PBC. ChatGPT i OpenAI są znakami towarowymi OpenAI. TellMyShop nie jest powiązany z tymi firmami.

Moduł startuje 29 października

Zapisz się na listę. Cenę Founders, 599 zł netto z aktualizacjami na zawsze, dostaniesz 72 godziny przed innymi.

Kilka wiadomości przed startem. Wypiszesz się jednym kliknięciem. Polityka prywatności

Przeczytaj też