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:
| Sytuacja | Po czym ją poznasz | Co 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łu | połączenie kodu obu nadpisań w jeden plik albo rezygnacja z jednego modułu |
| Nadpisanie zostało po starym module | modułu nie ma na liście, ale plik w override dalej ma jego kod | usunięcie osieroconej metody z pliku, z kopią |
| Ponowna instalacja tego samego modułu | moduł był odinstalowany z błędem i nie posprzątał po sobie | usunięcie pozostałości, potem instalacja od nowa |
| Ręczna zmiana sprzed lat | plik w override bez komentarza o module, nikt nie pamięta, skąd jest | ustalenie z poprzednim developerem, co robi, zanim cokolwiek ruszysz |
| Stara pamięć podręczna klas | po usunięciu nadpisania błąd dalej wraca | wyczyszczenie 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.
- Zapisz pełny komunikat. Potrzebna jest nazwa klasy i metody. Bez nich developer zgaduje.
- Zrób kopię bazy i katalogu
override. Najlepiej całego sklepu, a przynajmniej tego katalogu i folderu instalowanego modułu. - Znajdź plik, który już nadpisuje tę metodę. Dla klasy
Cartto zwykleoverride/classes/Cart.php. Nad metodą moduły często zostawiają komentarz z nazwą modułu i datą instalacji. - 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.
- Wyczyść pamięć podręczną. W Zaawansowane → Wydajność jest przycisk czyszczenia. PrestaShop odbuduje wtedy listę klas z nadpisaniami.
- 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
overridena ś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?
stara wersja: public function getOrderShippingCost(...) { /* wersja modułu darmowej dostawy */ }
nowa wersja: public function getOrderShippingCost(...) { /* wersja połączona: nowy moduł + próg darmowej dostawy */ }
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
overridei 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
overridesklepu 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.