Jump to content

Przy edycji produktu dodawane są losowo nowe kategorie oraz główna kategoria jest zmieniona


Piotr3qx

Recommended Posts

Cześć,

mam dziwny problem, którego nie potrafię naprawić ani znaleźć solucji w internecie. Niedawno zaktualizowałem PrestaShop do najnowszej wersji. Po aktualizacji jest problem z edycją produktów. Podczas edytowania produktu (albo po jego utworzeniu poprzez duplikację) gdzie usuwane są / zmieniane cechy / marki i zapisaniu zmian kategorie produktu są popsute. Dodawane są nowe losowe kategorie a kategoria główna jest zmieniona na jakąś inną losową. Czasami są sytuacje, gdzie cechy są losowo usuwane. 

Pierwszy raz się z tym spotykam, w internecie nie znalazłem podobnego problemu i nawet nie mam pomysłu gdzie rozpocząć naprawę tego problemu. Ktoś coś może doradzi lub pomoże?

Link to comment
Share on other sites

Pierwsza myśl była taka że po upgradzie cos się posypało z ID produktów w bazie stąd pytanie w jaki sposób to było zrobione, teoretycznie 1-click nie powinien  tym namieszać ale problem w takich przypadkach jest właśnie w bazie danych.

Czy nowo dodane produkty mają właściwy numer ID?

Link to comment
Share on other sites

Co masz na myśli pisząc właściwy numer ID? Każdy kolejny nowo dodany produkt ma o jeden numer większy ID od pozostałego.

Przy pierwszej edycji produktu (lub jego dodaniu) są pomieszane kategorie. Po drugiej aktualizacji zmiany są zapisywane poprawnie. Czasami dopiero po trzeciej aktualizacji nic się nie psuje. 

Po upgradzie na stronie edycji produktu był błąd JS, który myślałem że powoduje problem. Konsola pokazywała błąd ponownej deklaracji obiektu moduleCardController. Przyczynę błędu znalazłem (plik dwa razy był ładowany w przeglądarce, raz przez default theme a drugi raz z modułu ps_bo) i w module ps_bo dodałem warunek, że jeżeli jest strona edycji produktu to ma nie ładować tego pliku. Ale wątpię by to miało jakiś związek z tym błędem

Link to comment
Share on other sites

Maiłem na myśli auto inkrementacje ID i z tego co piszesz działa właściwie.

Problem z zapisem przez moduleCardController ostatnio widzę coraz częściej i bardzo często jest on powodowany również przez różne pagebuildery z szablonów.

Na początek posprawdzałbym podstawowe rzeczy po upgradzie takie jak usunięcie zawartości folderu var/cache, wyczyszczenie pamięci podręcznej w przeglądarce, zakładam że wersję PHP masz zgodną z wersją presty i w bazie danych masz wystarczającą ilość miejsca.

Później trzeba szukać głębiej i tu bym sprawdził w bazie danych czy to co się wyświetla w sklepie jest zgodne z tym co jest w bazie, czy zapis danych działa prawidłowo w bazie to ci pozwoli wykluczyć cache.

Link to comment
Share on other sites

Autoinkrementacja działa poprawnie. 

Page Buildera żadnego nie ma i nie było nigdy. Sklep jest oparty na czysto stworzonym szablonie. 

Pamięć podręczna była kilka razy czyszczona (z powodu błędów w konsoli JS musiałem kilka razy czyścić var/cache aby klientowi wszystko dobrze się wyświetlało).

PHP wersja 7.4. Baza danych waży 184.5 MB także trochę dużo (poprzednio śmietnik panował na sklepie pewnie stąd taka wielkość).

Reinstall Presty może coś tu pomóc? Aby wyczyścić wszystko na serwerze, na nowo zainstalować Prestę i wgrać bazę danych

Link to comment
Share on other sites

Teraz w sumie przypomniałem o jednej sytuacji, która również mogła mieć przyczynę tego problemu.

Jakoś niedługo po aktualizacji Presty chciałem stworzyć nowy produkt, chyba żadnych informacji nie zdołałem wypełnić i zamknąłem kartę. Na stronie sklepu natomiast pojawił się pusty produkt, bez ceny bez nazwy bez obrazka. Pusta miniaturka była z ceną 0. Co było dla mnie dziwne to na liście produktów w panelu tego produktu nie było. Nie dało się w niego wejść i go zedytować lub usunąć. Dopiero podmieniając adres URL innego edytowanego produktu (zmieniłem na ID pustego produktu w sklepie) udało mi się dostać do panelu edycji gdzie wypełniając dane pojawił się na liście produktów w panelu.

Czy taka sytuacja mogła coś namieszać w bazie danych? Może coś jest z tą sytuacją związane

Link to comment
Share on other sites

Zrobiłem reinstall PrestaShop i problem niestety nadal występuje...

Porównałem zawartość bazy danych z wyświetlanymi informacjami i bardzo mnie coś dziwi. Zauważyłem, że w bazie danych produkt ma zapisaną główną kategorię o ID 2, w tabeli `category_product` ma przypisane ID kategorii 2, 1600 oraz 1601. Natomiast na stronie edycji produktu jest zaznaczona (i jest ona główną) kategoria o ID 1649. Czyli informacje pochodzące z bazy danych kompletnie nie pokrywają się z informacjami wyświetlanymi na stronie edycji produktu

Link to comment
Share on other sites

Mam pewien postęp w moim problemie. Znalazłem tymczasowe rozwiązanie. Ale nie potrafię zrozumieć dlaczego to rozwiązanie działa...

Zapis danych edycji produktu następuje ajaxowo. W pliku JS, w miejscu wykonywania zapytania o aktualizację produktu, po pozytywnym zwrocie odpowiedzi z serwera, dodałem linijkę kodu window.location.reload(true) - po to aby przeładować od razu tą stronę. Ku memu zaskoczeniu pomogło, nie ma losowych kategorii, pola są poprawnie zapisywane.

I teraz pytanie, może ktoś będzie potrafił wyjaśnić mi, dlaczego coś takiego zadziałało. Co dzieje się po wykonaniu ajaxa a przed ręcznym odświeżeniem strony? Czy po ajaxie formularz edycji produktu jest nadpisywany informacjami zwrotnymi? 

Link to comment
Share on other sites

Szczerze to nie wiem co to powoduje, mógłbym obstawić że dane produktów nie są w 100% kompatybilne z schematem produktu w bazie i być może faktyczne ajax w jakiś sposób działa na obiekt product który nadpisuje sobie braki. Jeśli tak to teoretycznie szybszym sposobem byłby ponowny import produktów poprzez panel gdzie mógłbyś zaimportować np. nazwę produktu na podstawie ID w celu wywołania obiektu na każdym produkcie.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...