Press "Enter" to skip to content

przeniesienie kombinacji produktów ze sklepu w wersji 1.3-1.4 do 1.6.x

Admin 2

Czyli wykonanie po prostu importu. Można oczywiście zrobić plik CSV na podstawie dokumentacji. Jednak może być to karkołomne zadanie, jeśli ktoś widział jak wygląda taki plik (pobierz spakowany plik przykładowy CSV: combinations_import.csv)… Dodatkowo ze świeczką szukać modułu (nawet płatnego) do Presta Shop 1.3-1.4 który automatycznie wygeneruje taki arkusz.

Nasz sposób będzie wykonywany na poziomie bazy danych MySQL. Zupełnie poza zapleczem sklepu (no chyba żeby na końcu sprawdzić czy działa). Więc posiadanie dostępu do narzędzia PhpMyAdmin będzie bardzo wskazane. Dla obu baz – starej i nowej.

Idea jest taka, że tak przebudowujemy zawartość starej bazy z wersji sklepu 1.3-1.4 aby tabele uzyskały wygląd identyczny jak w 1.6.x do której następnie je po prostu zaimportujemy.

Metoda powinna działać także dla przyszłych wersji Presta Shop (na pewno w milestone 1.6) o ile twórcy tego oprogramowania nie zmienią zupełnie idei atrybutów na tej platformie.

Założenia

  1. Produkty w nowym (1.6.x) sklepie już zostały zaimportowane ze starego sklepu (1.3-1.4) przy pomocy np. tego darmowego narzędzia: pobierz darmowy moduł csvexport dla Presta Shop 1.4. Nie mają one na razie żadnych atrybutów a obecne w sklepie grupy atrybutów i ich wartości są domyślne i możemy je w całości usunąć. Uwaga! Za pomocą tego modułu nie będziemy importować grup atrybutów (nie ma on po za tym takich możliwości). Importujemy jedynie produkty.
  2. Produkty podczas importu mają narzucone poprzednie numery ID – poprzez zaznaczenie tych opcji  Tego nie przeskoczymy (No chyba, że wykonamy jakieś mapowanie tych numerów ID. Jednak może być to dość trudne w wykonaniu i wymagało by przebudowania naszej metody).
  3. Ponadto na nowym sklepie wszystkie zastane kombinacje zostaną (tak jak wspomniano wyżej) usunięte. Czyli zaleca się stosować tą metodę dla nowych sklepów gdzie jeszcze nie ma atrybutów lub te które są mogą być w całości usunięte.
  4. Potrzebujemy 2 osobne bazy danych. „starą” i „nową„. Czyli odpowiednio w wersji 1.3-1.4 i 1.6.x. Będziemy używać tej konwencji w dalszej części artykułu.
  5. Wszędzie w zapytaniach używamy domyślnego prefixu w nazwach tabel „ps_„. Jeśli Twoje tabele mają inny musisz to uwzględnić inaczej (co logiczne) zapytania SQL nic Ci nie dadzą.
  6. Jeśli chodzi o Multi Store na sklepie w wersji 1.6.x uwzględniamy tylko 1 sklep i ma on ID = 1. Jeśli import ma być wykonany dla innego sklepu – może wiązać się to z dodatkowymi pracami programistycznymi – prosimy wtedy o kontakt.
  7. Jeśli chodzi o języki w sklepach:
    1. Stary sklep ma 6 języków. Gdzie język angielski ma identyfikator o ID=1 a polski ID=6. Inne nas nie interesują i nie będą one brane pod uwagę. Zostaną wręcz usunięte.
    2. Nowy sklep ma 2 języki: polski ID=1, angielski ID=2
      UWAGA! U Ciebie ID języków mogą być inne i należy to uwzględnić.

Tyle założeń, pasuje jeszcze to napisać:

Przed przystąpieniem do prac wykonaj koniecznie kopię bezpieczeństwa obu baz danych. To nic nie kosztuje a prędzej czy później mogą Ci się przydać…

Do dzieła!

Wprowadzenie różnic w strukturze tabel

Nowa wersja Presta Shop posiada w zasadzie te same tabele na których nam zależy, jednak różnią się one ilością kolumn i ich typami. Należy je ujednolicić. Wykonujemy to w starej bazie danych:

Tabela ps_attribute:

Tutaj mały komentarz:

Jak widzimy – doszło tutaj nowe pole „position„. Domyślnie wszystkie wartości w tej tabeli będą ustawione na: 0. Prawdopodobnie Presta Shop odpowiednio je wypełni lub nie będzie to wpływało na pracę systemu. Jednak gdy się tak nie stanie należy w sposób ręczny lub przy pomocy pomocniczego pliku CSV wypełnić te pola aby narastały w porządku wartości kolumny id_attribute_groupzobacz obrazek

Tabela ps_attribute_group:

Z kolei to pole „position” powinno narastać od 0 do wartości takiej jak ilość wierszy w tej tabeli. Należy albo wypełnić tą kolumnę ręcznie albo liczyć na to, że Presta Shop to skoryguje (jest szansa że tak się stanie, niestety tego nie sprawdzaliśmy).

Tabela ps_attribute_impact:

Tabela ps_product_attribute:

(radzimy każde zapytanie – są one oddzielone średnikami – realizować osobno)

Jeśli powyższe zapytanie zwórci błąd nakleży dodać to pole:

W przypadku nowszych wersji z gałęzi Presta Shop 1.6.x  (np. 1.6.1.17) należy dodać jeszcze to pole:

Bez wykonania tej czynności może występować problem z dodawaniem do koszyka. Karta zamówienia jest wtedy pusta i suma zamówienia to zero.

Dodanie nowych tabel

Wersja 1.3-1.4 nie obsługiwała funkcji Multi Store. W związku z tym pojawiają się nowe tabele, które musimy dodać. Tworzymy je z tej przyczyny, że w dalszych pracach będziemy do nich kopiować wymagane dane. Operujemy w dalszym ciągu na starej bazie danych:

Tabela ps_attribute_group_shop:

Tabela ps_attribute_shop:

Tabela ps_product_attribute_shop:

Zapełnie treścią dodatkowych tabel

Nowe tabele w starej bazie danych musimy zapełnić treścią wg. wymagań dokumentacji Presta Shop 1.6. Dla pewności że „autoincremetnowane” pola (których wartości liczbowe są tworzone automatycznie poprzez zwiększanie wartości o +1) będą mieć takie wartości na jakich nam zależy przed wypełnieniem – czyścimy tabele poleceniem truncate:

Wypełnienie tabeli ps_attribute_group_shop:

Wypełnienie ps_attribute_shop:

Wypełnienie ps_product_attribute_shop:

(radzimy każde zapytanie – są one oddzielone średnikami – realizować osobno)

Jeśli powyższe zapytanie wywoła błąd należy dodać to pole i ponowić w/w zapytanie:

Usunięcie niepotrzebnych wpisów językowych

ID języków określiliśmy na początku tego artykułu – Założenia pkt. 7.

Należy teraz tak ustawić wpisy w tabelach odpowiedzialnych za atrybuty (dalej w starej bazie) aby odpowiednio ustawić te indeksy.

Ogólnie usuwamy w starej bazie języki które nie są oznaczone jako polski lub angielski. Czyli w naszym przypadku języki o ID 2,3,4,5 są usuwane, a ID języka polskiego i angielskiego zmienione na takie jak są w nowej bazie.

W Twoim przypadku ID języków w nowej i w starej bazie mogą być inne i musisz to uwzględnić.

Tabela ps_attribute_group_lang:

Tabela ps_attribute_lang:

Przykład z innymi ID języków:

Jeśli w starej bazie mamy 3 języki:

  • ID = 1 – angielski
  • ID = 2 – francuski
  • ID = 3 – polski

Natomiast na nowym sklepie 6 języków:

  • ID = 1 – angielski
  • ID = 2 – niemiecki
  • ID = 3 – rosyjski
  • ID = 4 – hiszpański
  • ID = 5 – francuski
  • ID = 6 – polski

W/w zapytania będą miały taką formę:

Usuwanie innych języków niż polski i angielski:

(Jeśli chcemy zachować język francuski nie usuwamy tego języka)

Angielski ma taki sam ID – nie zmieniamy go.

Francuski (jeśli chcemy go zachować):

Polski – analogicznie:

Export i import

Gotowe! Teraz należy wyexportować (w PhpMyAdmin należy kliknąć zakładkę Export i na liście tabel w opcji rozszerzonej zaznaczyć wybrane z wciśniętym klawiszem CTRL) ze starej bazy tabele wraz z zawartością:

Czyli tak naprawdę należy wyeksportować wszystkie tabele z ‚attribute‚ w nazwie. Następnie taki zrzut tabel musimy zaimportować do nowej bazy danych nadpisując tamte lub uprzednio usuwając.

Aktualizacja ilości

Na nowej bazie danych wywołujemy to zapytanie:

(radzimy każde zapytanie – są one oddzielone średnikami – realizować osobno):

Ustawi ono domyślnie 100 sztuk dla każdej z zaimportowanej kombinacji. W innym wypadku na nowym sklepie nie będzie można dodać żadnej kombinacji do koszyka.

Asekuracyjnie na sklepie należy jeszcze wyczyścić cache i przebudować indeks produktów.

I to by było na tyle!

Share This:

  1. Dzięki za arta, mam sklep 1.4.4.1 i czaję się nad przejściem na 1.6
    Może skorzystam..

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *