Jak korzystać z systemu nadpisywania w PrestaShop bez naruszania rdzenia

System nadpisywania w PrestaShop pozwala dostosować działanie rdzenia bez ingerencji w oryginalne pliki. Jednak nieostrożne jego użycie prowadzi do powstania niestabilnych sklepów, które przestają działać po aktualizacjach. Ten poradnik Knowbanda omawia, jak działają nadpisywania, kiedy ich używać i trzy kluczowe pułapki, które powinien znać każdy programista.

Czym jest system nadrzędny?

PrestaShop wykorzystuje dziedziczenie PHP, aby umożliwić Ci podmianę dowolnej klasy podstawowej bez ingerencji w oryginały. Każda klasa podstawowa ma nazwę z sufiksem Core, na przykład ProductCore. Jeśli utworzysz plik /override/classes/Product.php z klasą o nazwie Product, która rozszerza ProductCore, PrestaShop załaduje Twoją wersję. To samo dotyczy kontrolerów.

Nadpisuj tylko te metody, które chcesz zmienić, nigdy nie kopiuj całego pliku klasy. Dzięki temu nadpisanie będzie prostsze i znacznie zmniejszy się ryzyko kolizji z przyszłymi aktualizacjami.

Przykład: ujawnienie bieżącej nazwy kontrolera w szablonie nagłówka:

Gdzie umieścić pliki nadrzędne

Nadpisania mogą znajdować się w dwóch miejscach. Globalny katalog /override/ w katalogu głównym instalacji jest aktywny natychmiast po wyczyszczeniu pamięci podręcznej. Lepszym rozwiązaniem jest umieszczenie nadpisań w module.

Umieszczenie nadpisu w module (np. /modules/mymodule/override/classes/Product.php) powoduje, że PrestaShop kopiuje go do /override/ podczas instalacji i usuwa bezproblemowo podczas deinstalacji. Jest to zalecane podejście.

Szybki przykład nadpisania klasy. Załóżmy, że chcesz udostępnić nazwę bieżącego kontrolera w szablonie nagłówka:

// /override/classes/controllers/FrontController.php

klasa FrontController rozszerza FrontControllerCore {

    funkcja publiczna initHeader() {

        self::$smarty->assign('currentController', get_class($this));

        zwróć nadrzędny::initHeader();

    } }

Zawsze wywołuj metodę nadrzędną, chyba że masz ku temu celowy powód. Pominięcie jej spowoduje przerwanie działania podstawowej funkcjonalności.

Nadpisywanie klas modułów i kontrolerów

Od PrestaShop 1.6 można również nadpisywać klasy modułów. Dodaj „Override” do nazwy klasy (np. BlockUserInfoOverride rozszerzające BlockUserInfo) i umieść ją w katalogu /override/modules/. To samo dotyczy kontrolerów modułów. Po każdym nadpisaniu wyczyść pamięć podręczną, a konkretnie usuń plik /cache/class_index.php, w przeciwnym razie nie zostanie ono uwzględnione.

Kiedy NIE używać nadpisów

Nadpisania są wyłączne — może istnieć tylko jedno na klasę. Są one również zabronione w modułach marketplace i powinny być zarezerwowane dla prywatnych dostosowań sklepu. Zanim sięgniesz po nadpisania, rozważ jedną z poniższych alternatyw:

  • Haczyki: PrestaShop uruchamia zdarzenia hook przy każdym ładowaniu strony — możesz z nich korzystać z poziomu modułu, aby uruchamiać niestandardowy kod lub umieszczać treść na stronie bez konieczności korzystania z klasy podstawowej.
  • Nadpisania usługi Symfony: Części PrestaShop, które zostały zmigrowane do Symfony, zapewniają bardziej przejrzystą ścieżkę przez kontener usług. Dekorujesz lub zastępujesz usługę, zamiast deptać samą klasę.
  • Niestandardowy model obiektu: Potrzebujesz dodać pola do encji głównej? Zbuduj własny ObjectModel z własną tabelą, zamiast łatać istniejący.

Zachowywanie bezpieczeństwa nadpisów poprzez aktualizacje

Aktualizacje PrestaShop mogą po cichu zmieniać sygnatury metod, pozostawiając nadpisanie działające na podstawie nieaktualnych założeń. Traktuj każde nadpisanie jako coś, do czego należy wracać po każdej aktualizacji. Skomentuj zmiany i ich uzasadnienie, sprawdź dziennik zmian i staraj się, aby nadpisanie było jak najmniejsze. Wąskie, dobrze skomentowane nadpisanie, które poprawnie wywołuje metody nadrzędne, przetrwa aktualizacje. Pełna kopia klasy to błąd, który tylko czeka, aby się ujawnić.

Pamięć podręczna „Ghost”: dlaczego Twoja nadpisana pamięć wydaje się niewidoczna

Najczęstszy powód, dla którego programiści uważają, że ich nadpisanie jest uszkodzone: PrestaShop nie skanuje pliku /override/ przy każdym żądaniu. Kompiluje mapę klas do pliku /cache/class_index.php i dopóki ten plik nie zostanie usunięty i wygenerowany ponownie, nadpisanie jest niewidoczne, niezależnie od poprawności kodu. Wyczyszczenie pamięci podręcznej Smarty nie wystarczy. Usuń plik class_index.php ręcznie przez FTP/SSH, w zakładce Parametry zaawansowane > Wydajność w panelu administracyjnym lub za pomocą konsoli Symfony.

Rysunek 1: Przepływ informacji w systemie nadpisywania PrestaShop i rola pliku /cache/class_index.php.

 

The Symfony Wall: starsze nadpisy nie działają w przypadku nowoczesnych kontrolerów

Ten starszy system PHP działa tylko na starszej warstwie ObjectModel PrestaShop. Od PS 1.7 kluczowe obszary zaplecza, w tym nowa strona produktu i ekrany zamówień, zostały przepisane w Symfony. System nadpisywania kodu PHP nie ma wpływu na te kontrolery Symfony. Dla tych użyj Dekoracja serwisowa, opakowanie lub zastąpienie usługi za pomocą pliku services.yml modułu. Jeśli nadpisanie nie daje efektu nawet po wyczyszczeniu pliku class_index.php, kontroler prawdopodobnie został zmigrowany przez Symfony.

Rozwiązywanie konfliktów: gdy dwa moduły chcą tej samej klasy

Gdy dwa moduły nadpisują tę samą klasę, PrestaShop zgłasza błąd podczas drugiej instalacji i pozostawia nadpisanie nieaktywne. Rozwiązanie jest ręczne: otwórz oba pliki, scal wszystkie metody w jeden plik /override/, który rozszerza klasę Core, a następnie usuń plik class_index.php. Dodaj komentarze identyfikujące moduły, które wniosły każdą metodę. Właśnie dlatego nadpisania są zakazane w modułach na platformie sprzedażowej – konflikty stają się problemem dla sprzedawcy. Jeśli tworzysz dla innych, używaj hooków.

Rysunek 2: Jak powstają konflikty nadpisywania, gdy dwa moduły są przeznaczone dla tej samej klasy, oraz jak rozwiązać ręczne scalanie.

O Knowbandie

Knowband to zaufany dostawca wtyczek i rozszerzeń do handlu elektronicznego z wieloletnim doświadczeniem w pomaganiu sprzedawcom internetowym w budowaniu szybszych, inteligentniejszych i bogatszych w funkcje sklepów. Niezależnie od tego, czy prowadzisz swój sklep na PrestaShop, OpenCart, Shopify, WooCommerce, Magentolub dowolnej innej dużej platformie, Knowband oferuje szeroką gamę gotowych do użycia wtyczek i rozszerzeń, które pomogą Ci zwiększyć funkcjonalność, poprawić wydajność i zapewnić lepsze wrażenia zakupowe, bez konieczności budowania wszystkiego od podstaw.

Co nowego w PrestaShop 9.0? Pełny przewodnik po funkcjach i migracji

Dlaczego PrestaShop?

PrestaShop to wiodąca platforma e-commerce typu open source, znana ze swojej elastyczności, potężnych funkcji i zerowych kosztów licencjonowania. Znana z intuicyjnego interfejsu, obsługi wielu języków/walut i bogatego ekosystemu modułów i motywów, jest idealna dla MŚP tworzących niestandardowe sklepy internetowe. PrestaShop 9.0 stanowi znaczący kamień milowy, oferując ulepszenia wydajności i niezbędne udoskonalenia architektoniczne odzwierciedlające nowoczesne standardy rozwoju, skalowalność i długoterminową łatwość utrzymania.

Co nowego w PrestaShop 9.0?

PrestaShop 9.0 wprowadza całkowitą modernizację rdzenia — to duży krok naprzód, który zmienia sposób, w jaki programiści i właściciele sklepów korzystają z systemu.

Zmiany w architekturze rdzenia

Pełna integracja z Symfony:PrestaShop 9 kończy przejście na framework Symfony, zapewniając nowoczesną, stabilną podstawę dla przyszłego rozwoju. Klasy legacy i przestarzałe kontrolery zostały wycofane lub zastąpione, dzięki czemu system jest łatwiejszy w utrzymaniu i zgodny z najlepszymi praktykami.

Wsparcie PHP 8.1+: Wymagana jest wersja PHP 8.1 lub nowsza, co zapewnia zgodność z najnowszymi funkcjami, lepsze bezpieczeństwo i szybszą wydajność.

Doktryna DBAL:Warstwa abstrakcji bazy danych usprawnia interakcje z bazą danych, zapewniając lepszą abstrakcję, tworzenie zapytań i możliwość testowania — co jest szczególnie przydatne w przypadku dostosowań na dużą skalę.

Rozwój zorientowany na kompozytora:Composer 2.x odgrywa teraz centralną rolę w procesie tworzenia oprogramowania, sprawnie obsługując zarządzanie zależnościami, integrację modułów i automatyczne ładowanie. Upraszcza to kontrolę wersji i zwiększa zgodność CI/CD.

Ulepszenia zaplecza i programistów

Skupiając się na usprawnieniach zaplecza, sprzedawcy i deweloperzy zauważą:

  • Szybsze ładowanie stron i skrócony czas reakcji serwera
  • Czystsza baza kodu dzięki usunięciu starej logiki
  • Ulepszona modułowość dla czystszych, samodzielnych modułów
  • Lepsze pokrycie testowe dla stabilnych, bezpiecznych wydań

Chociaż zmiany w interfejsie użytkownika są minimalne, te wewnętrzne aktualizacje radykalnie zwiększają stabilność sklepu i łatwość jego obsługi.

Przewodnik po migracji: z PrestaShop 8 do 9

Metoda 1: Aktualizacja jednym kliknięciem (zalecana)

Dostępne narzędzia:

  • Oficjalny moduł aktualizacji 1-Click: standardowy moduł aktualizacji PrestaShop obsługujący automatycznie przejścia między wersjami
  • MigrationPro: Rozwiązanie firm trzecich wspierające migrację z kompleksowym transferem danych
  • PrestaShop Migrator: alternatywne rozwiązanie typu „jednym kliknięciem” umożliwiające bezproblemową aktualizację

Zalety:

  • Zautomatyzowany proces z minimalną ingerencją ręczną
  • Wbudowane kontrole integralności danych
  • Zmniejszone ryzyko błędów ludzkich
  • Krótszy czas migracji
  • Automatyczne tworzenie kopii zapasowych

Proces tworzenia kopii zapasowej z automatyczną aktualizacją:

  1. BackupInitialization: Rozpoczęcie procesu, czyszczenie pozostałych plików tymczasowych
  2. BackupFiles: Kompletna kopia zapasowa plików sklepu, motywów, modułów, obrazów i niestandardowego kodu
  3. BackupDatabase: Tworzy kompletną kopię zapasową całej bazy danych, obejmującą wszystkie tabele i zapisane dane.
  4. Daj mi znać, czy wolisz wersję bardziej zwięzłą czy szczegółową.
  5. BackupComplete: Finalizacja procesu z weryfikacją

Proces wycofywania:Jeśli podczas aktualizacji wystąpią problemy, można łatwo przywrócić poprzednią wersję za pomocą sekcji „Wycofywanie” modułu automatycznej aktualizacji, wybierając archiwum kopii zapasowej i monitorując postęp wycofywania.

Migracja danych:Automatycznie obsługuje transfer produktów, kategorii, atrybutów, kont klientów, historii zamówień, stron CMS, ustawień konfiguracji, obrazów i zgodnych konfiguracji modułów.

Metoda 2: Migracja ręczna (czasochłonna)

Świeża instalacja PrestaShop 9, a następnie ręczna migracja danych.

Przegląd procesu:

  1. Przejrzyj wymagania serwera: PHP 8.1+, MySQL 5.7+/MariaDB 10.3+, Composer 2.x, Apache/Nginx
  2. Pełna kopia zapasowa:Baza danych, pliki, konfiguracja, kod niestandardowy
  3. Zainstaluj PrestaShop 9.0:Świeża instalacja za pomocą Git i Composer
  4. Strategia migracji danych:Eksportuj z PS8 (produkty, klienci, zamówienia, CMS, konfiguracje) i importuj do PS9 przy użyciu natywnych narzędzi, modułów innych firm lub ręcznego wprowadzania danych
  5. Ocena zgodności modułów: Audyt istniejących modułów, aktualizacja kompatybilnych, identyfikacja alternatyw dla niekompatybilnych modułów
  6. Rekonstrukcja tematu:Przebuduj motywy przy użyciu zaktualizowanej architektury PS9, dostosuj do wymagań Symfony
  7. Kompleksowe testowanie: Funkcjonalność front office (przeglądanie, realizacja transakcji, płatności, urządzenia mobilne) i back office (zarządzanie produktami, zamówienia, raportowanie)

Rekomendacja

Metoda 1 (aktualizacja jednym kliknięciem) jest zdecydowanie polecany większości handlowców ze względu na:

  • Znacznie skrócony czas migracji
  • Niższe ryzyko utraty/uszkodzenia danych
  • Zautomatyzowane przetwarzanie złożonych relacji danych
  • Wbudowane możliwości cofania
  • Dostępność profesjonalnego wsparcia

Metodę 2 (migrację ręczną) należy rozważyć tylko w przypadku szczególnych wymagań personalizacyjnych wymagających nowej instalacji lub gdy narzędzia automatyczne są niezgodne.

Lista kontrolna po migracji

Niezależnie od wybranej metody:

  • Zweryfikuj wszystkie krytyczne funkcje sklepu
  • Przetestuj integracje płatności i wysyłek
  • Potwierdź ustawienia SEO i struktury URL
  • W razie potrzeby zaktualizuj certyfikaty DNS i SSL
  • Monitoruj wydajność witryny i szybkość ładowania
  • Przeszkolenie personelu w zakresie zmian w interfejsie

Uwagi końcowe

PrestaShop 9.0 wyznacza silny kurs w kierunku zwiększonej szybkości, zwiększonego bezpieczeństwa i bardziej zorientowanego na programistów ekosystemu. Chociaż uaktualnienie wymaga planowania i wysiłku, długoterminowe korzyści są znaczne — lepsza wydajność, czystszy kod, zwiększona skalowalność i nowoczesne narzędzia.

Jeśli korzystasz ze starszej wersji, oceń długoterminową wartość migracji na PrestaShop 9. Jeśli nie masz pewności co do procesu lub nie masz własnych programistów, zdecydowanie zaleca się konsultację ze specjalistą PrestaShop lub certyfikowanym partnerem.

Nadal zastanawiasz się, czy zmienić firmę?

Jeśli nie masz pewności, czy przeniesienie się z PrestaShop 8 do 9 to właściwy krok dla Twojego sklepu, zapraszamy do zapoznania się z naszym szczegółowym porównaniem i opiniami ekspertów.

Poznaj najważniejsze korzyści, potencjalne zagrożenia i rzeczywisty wpływ migracji — i podejmij świadomą decyzję dla swojej firmy.

Poznaj przewodnik po porównaniu PrestaShop 8 i 9