Press "Enter" to skip to content

Aktualizacja PrestaShop do 1.7 – dane starego sklepu w zupełnie czystej instalacji PS17 [UPDATE]

Admin 6

Wprowadzenie do importu przez MySQL

Artykuł ten jest rozwinięciem tego poradnika z naszego bloga dotyczącego importu produktów z PrestaShop 1.6 do 1.7 od strony bazy danych:

Szybki import produktów z PrestaShop 1.6 do PrestaShop 1.7

Tak naprawdę jest to kompleksowa instrukcja wstawienia danych ze sklepu działającego pod wersją 1.6 do „pudełkowej” instalacji PrestaShop 1.7. Czyli takiej jakiej otrzymujesz od wydawcy tego oprogramowania w wersji demo. W związku z tym nie mamy tam żadnych modułów z poprzedniego sklepu ani innej konfiguracji. Jest to o tyle korzystne, że pliki sklepu (i przede wszystkim baza danych) nie jest zaśmiecona pozostałościami po poprzedniej wersji. Niestety zawsze może się coś wykrzaczyć po „standardowej” aktualizacji wyłącznie przez moduł „Akutalizacja 1 kliknięciem” (moduł autoupgrade).

WAŻNE: Artykuł ma charakter rozwojowy. Jeśli pojawią się istotne aspekty usprawniające ten proces będą tu umieszczane. Zalecamy zatem śledzenie zmian w tym artykule, bo mogą być w nim naniesione korekty.

Warto zaznaczyć, że ilość danych nie ma znaczenia. MySQL poradzi sobie nawet z kopiowaniem tabel o milionie elementów 🙂

Pomijamy tutaj na czym polega przygotowanie takich baz danych do kopiowania. Dokładnie było to dokładnie przedstawione w ww. artykule do którego odsyłamy powyżej.

Przygotowanie: Wyczyszczenie nowej instalacji PrestaShop 1.7

Ważne, aby baza była opróżniona przez moduł pscleaner:

Usunięcie testowych danych ze sklepu, wyczyszczenie sklepu z testowego asortymentu

(OPCJONALNE) Możesz też użyć poniższego zapytania do wyczyszczenia wymaganych tabel:

TRUNCATE pr_accessory ;
TRUNCATE pr_address ;
TRUNCATE pr_alias ;
TRUNCATE pr_attachment ;
TRUNCATE pr_attachment_lang ;
TRUNCATE pr_attribute ;
TRUNCATE pr_attribute_group ;
TRUNCATE pr_attribute_group_lang ;
TRUNCATE pr_attribute_group_shop ;
TRUNCATE pr_attribute_impact ;
TRUNCATE pr_attribute_lang ;
TRUNCATE pr_attribute_shop ;
TRUNCATE pr_cart ;
TRUNCATE pr_cart_cart_rule ;
TRUNCATE pr_cart_product ;
TRUNCATE pr_cart_rule ;
TRUNCATE pr_cart_rule_carrier ;
TRUNCATE pr_cart_rule_combination ;
TRUNCATE pr_cart_rule_country ;
TRUNCATE pr_cart_rule_group ;
TRUNCATE pr_cart_rule_lang ;
TRUNCATE pr_cart_rule_product_rule ;
TRUNCATE pr_cart_rule_product_rule_group ;
TRUNCATE pr_cart_rule_product_rule_value ;
TRUNCATE pr_cart_rule_shop ;
TRUNCATE pr_customer ;
TRUNCATE pr_customer_group ;
TRUNCATE pr_customer_message ;
TRUNCATE pr_customer_message_sync_imap ;
TRUNCATE pr_customer_session ;
TRUNCATE pr_customer_thread ;
TRUNCATE pr_customization ;
TRUNCATE pr_customization_field ;
TRUNCATE pr_customization_field_lang ;
TRUNCATE pr_customized_data ;
TRUNCATE pr_emailsubscription ;
TRUNCATE pr_feature ;
TRUNCATE pr_feature_lang ;
TRUNCATE pr_feature_product ;
TRUNCATE pr_feature_shop ;
TRUNCATE pr_feature_value ;
TRUNCATE pr_feature_value_lang ;
TRUNCATE pr_image ;
TRUNCATE pr_image_lang ;
TRUNCATE pr_image_shop ;
TRUNCATE pr_manufacturer ;
TRUNCATE pr_manufacturer_lang ;
TRUNCATE pr_manufacturer_shop ;
TRUNCATE pr_message ;
TRUNCATE pr_message_readed ;
TRUNCATE pr_order_carrier ;
TRUNCATE pr_order_cart_rule ;
TRUNCATE pr_order_detail ;
TRUNCATE pr_order_detail_tax ;
TRUNCATE pr_order_history ;
TRUNCATE pr_order_invoice ;
TRUNCATE pr_order_invoice_payment ;
TRUNCATE pr_order_invoice_tax ;
TRUNCATE pr_order_message ;
TRUNCATE pr_order_message_lang ;
TRUNCATE pr_order_payment ;
TRUNCATE pr_order_slip ;
TRUNCATE pr_order_slip_detail ;
TRUNCATE pr_orders ;
TRUNCATE pr_pack ;
TRUNCATE pr_product ;
TRUNCATE pr_product_attachment ;
TRUNCATE pr_product_attribute ;
TRUNCATE pr_product_attribute_combination ;
TRUNCATE pr_product_attribute_image ;
TRUNCATE pr_product_attribute_shop ;
TRUNCATE pr_product_carrier ;
TRUNCATE pr_product_download ;
TRUNCATE pr_product_lang ;
TRUNCATE pr_product_sale ;
TRUNCATE pr_product_shop ;
TRUNCATE pr_product_supplier ;
TRUNCATE pr_product_tag ;
TRUNCATE pr_specific_price ;
TRUNCATE pr_specific_price_priority ;
TRUNCATE pr_specific_price_rule ;
TRUNCATE pr_specific_price_rule_condition ;
TRUNCATE pr_specific_price_rule_condition_group ;
TRUNCATE pr_stock ;
TRUNCATE pr_stock_available ;
TRUNCATE pr_supplier ;
TRUNCATE pr_supplier_lang ;
TRUNCATE pr_supplier_shop ;
TRUNCATE pr_supply_order ;
TRUNCATE pr_supply_order_detail ;
TRUNCATE pr_supply_order_history ;
TRUNCATE pr_supply_order_receipt_history ;
TRUNCATE pr_warehouse ;
TRUNCATE pr_warehouse_carrier ;
TRUNCATE pr_warehouse_product_location ;
TRUNCATE pr_warehouse_shop ;

DELETE FROM  pr_category WHERE pr_category.id_category>2;
DELETE FROM  pr_category_group WHERE pr_category_group.id_category>2;
DELETE FROM  pr_category_lang WHERE pr_category_lang.id_category>2;
DELETE FROM  pr_category_product WHERE pr_category_product.id_category>2;
DELETE FROM  pr_category_shop WHERE pr_category_shop.id_category>2;
DELETE FROM  pr_feature_flag WHERE pr_feature_flag.id_feature_flag>1;
DELETE FROM  pr_group WHERE pr_group.id_group>3;
DELETE FROM  pr_group_lang WHERE pr_group_lang.id_group>3;
DELETE FROM  pr_group_reduction WHERE pr_group_reduction.id_group>3;
DELETE FROM  pr_group_shop WHERE pr_group_shop.id_group>3;

Przygotowanie: Prefixy tabel + akutualizacja PS16

Import wykonujemy z tą różnicą co do artykułu „Szybki import produktów z PrestaShop 1.6 do PrestaShop 1.7”, że prefixy tabel przedstawiają sie nieco inaczej:

  1. Prefix nowej instancji PrestaShop – tj świeżej instalacji do której kopujemy dane to: pr_ Czyli np. jej tabele będą mieć postać pr_access, pr_accessory… itd. Jak masz inny prefix – uwzględnij to w zapytaniach albo zmień prefixy na swoje.
  2. Prefix „starej” instalacji – skąd pobieramy dane to standardowo: ps_

AKTUALIZACJA: UWAGA! Kolejną różnicą w stosunku do modelu pracy w ww. artykule jest to, że baza danych z której kopiujemy (ta z prefixem ps_) musi być to baza sklepu zakutalizowanego przez moduł autoupgrade (1-Click Upgrade – Aktualizacja jednym kliknięciem) do najnowszej możliwej wersji. Tutaj pracowaliśmy na wersji PrestaShop 1.7.8.1. Czyli zarówno nowa instalacja PrestaShop zainstalowana z pliku zip ze strony prestashop.com (ta, z bazą danych z prefixem pr_) jak i ta zakualizowana przez moduł  – miały tę wersję. Pozwala to na praktycznie bliźniacze bazy danych i bezproblemowy „IMPORT via SELECT” w MySQL.

Kopiujemy tabele niezbędne aby na nowej, pudełkowej instalacji PrestaShop pojawiły się produkty, zdjęcia produktów, kategorie, producenci, adesy klientów, ich konta, a nawet – zamówienia. Jak widać otrzymasz przy odrobinie szczęścia 🙂 – nową instalację PrestaShop ze starymi danymi.

Taki sklep oczywiście należy potem skonfigurować. Podstawową checklistę znajdziesz tutaj:

Checklista (50+ porad) do wykonania po instalacji nowego sklepu PrestaShop 1.7 [AKTUALIZACJA]

Przygotowanie: Języki, Waluty, DB Backup

Pamiętaj też o zbieżności języków. Muszą być one identyczne w obu tabelach. Czyli np. język pl musi mieć ID = 1 a ang ID = 2 itd. Czyli po prostu nowa intalacja PrestaShop musi mieć identyczny zestaw jezyków jak stary sklep, który aktualizowałeś przez moduł autoupgrade. Jak docelowy sklep będzie miał inne języki – albo któryś będzie brakowało mogą wystąpić wartości null w zapytaniach i w najmniej spodziewanym momencie sklep wywali monit typu:

Problem po imporcie danych lub ręcznej aktualizacji: Właściwość Address->dni jest pusta.

Równie ważne są identyczne waluty na obu sklepach. Jak na docelowym był np. zestaw ID = 1 to PLN, ID = 2 to Dolar USD, ID = 3 to Euro – musisz identyczne języki zapewnić w nowej instalacji. Inaczej np. może być problem z odczytaniem detali klienta zzagranicy. (niebawem przybliżymy ten problem).

Ostatni aspekt, który należy poruszyć to oczywiście kopia bezpieczeństwa starej bazy danych. Jak coś pójdzie nie tak – będzie pozwalała wrócić do startu.

Najlepiej wykonywać liczne kopie bezpieczeństwa w trakcie importu – dzieląc sobie go na etapy. Np. kopia po zaimportowaniu danych klientów, zamówień, produktów + atrybutów itp.

Zaczynamy!

Import akcesoriów, adresów, załączników, atrybutów i in.

INSERT INTO pr_accessory  SELECT * FROM  ps_accessory;
INSERT INTO pr_address  SELECT * FROM  ps_address;
INSERT INTO pr_alias  SELECT * FROM  ps_alias;
INSERT INTO pr_attachment  SELECT * FROM  ps_attachment;
INSERT INTO pr_attachment_lang  SELECT * FROM  ps_attachment_lang;
INSERT INTO pr_attribute  SELECT * FROM  ps_attribute;
INSERT INTO pr_attribute_group  SELECT * FROM  ps_attribute_group;
INSERT INTO pr_attribute_group_lang  SELECT * FROM  ps_attribute_group_lang;
INSERT INTO pr_attribute_group_shop  SELECT * FROM  ps_attribute_group_shop;
INSERT INTO pr_attribute_impact  SELECT * FROM  ps_attribute_impact;
INSERT INTO pr_attribute_lang  SELECT * FROM  ps_attribute_lang;
INSERT INTO pr_attribute_shop  SELECT * FROM  ps_attribute_shop;

Import przewoźników

Następnie lecą przewoźnicy. Tytaj na początku opróżniamy tabele:

TRUNCATE pr_carrier ;
TRUNCATE pr_carrier_group ;
TRUNCATE pr_carrier_lang ;
TRUNCATE pr_carrier_shop ;
TRUNCATE pr_carrier_tax_rules_group_shop ;
TRUNCATE pr_carrier_zone ;
INSERT INTO pr_carrier  SELECT * FROM  ps_carrier;
INSERT INTO pr_carrier_group  SELECT * FROM  ps_carrier_group;
INSERT INTO pr_carrier_lang  SELECT * FROM  ps_carrier_lang;
INSERT INTO pr_carrier_shop  SELECT * FROM  ps_carrier_shop;
INSERT INTO pr_carrier_tax_rules_group_shop  SELECT * FROM  ps_carrier_tax_rules_group_shop;
INSERT INTO pr_carrier_zone  SELECT * FROM  ps_carrier_zone;

Import koszyków

INSERT INTO pr_cart  SELECT * FROM  ps_cart;
INSERT INTO pr_cart_cart_rule  SELECT * FROM  ps_cart_cart_rule;
INSERT INTO pr_cart_product  SELECT * FROM  ps_cart_product;

I tutaj uwaga. Zanim przystąpisz do importu tabeli ps_cart_rule. Należy ją „poprawić”. A dokładniej identycznie ustawić kolejność kolumn. Wynika to z tego, że po aktualizacji bazy danych o prefixie ps_ nowe kolumny trafiły na koniec tabeli. Niestety tak działa moduł autoupgrade. Sprawia to, że wygląd tabel różni się między sobą i procedura IMPORT przez SELECT w MySQL tutaj nie zadziała. Taka korekta kolejności kolumn będzie miała jeszcze miejsce parokrotnie więc warto ją dokładnie zrozumieć.

UWAGA! może sie zdażyć, że ilość tabel do korekty może być większa. Musisz być elastyczny/a i w momencie jak natrafisz na błędy ze strukturą – tak poprawić tabelę (najlepiej starą – tą z prefixem ps_) aby była identyczna z tą do której wstawiasz dane (do tabeli z wersji pudełkowej o prefixie pr_)

Bez wykonania tej czynności po prostu nie zaimportujesz tej tabeli i natrafisz na błąd:

ERROR 1264 (22003): Out of range value for column 'reduction_exclude_special' at row 1

Poprawienie kolejności kolumn jest bardzo proste. W PHPmyAdmin otwórz tabelę ps_cart_rule wybierz zakładkę Struktura i zjedź na sam dół. Jak widać jest tam kolumna: reduction_exclude_special. Powinna być ona pod kolumną: reduction_product.

Na screenie zaznaczone jest to na czerwono:

Do korekty kolejności służy opcja zaznaczona na zielono. Po prostu odp. przesuń tę kolumnę i zatwierdź wybór:

Po korekcie – kolejność kolumn jest już prawidłowa:

Gotowe, można teraz kontynuować import koszyków:

INSERT INTO pr_cart_rule  SELECT * FROM  ps_cart_rule;             
INSERT INTO pr_cart_rule_carrier  SELECT * FROM  ps_cart_rule_carrier;
INSERT INTO pr_cart_rule_combination  SELECT * FROM  ps_cart_rule_combination;
INSERT INTO pr_cart_rule_country  SELECT * FROM  ps_cart_rule_country;
INSERT INTO pr_cart_rule_group  SELECT * FROM  ps_cart_rule_group;
INSERT INTO pr_cart_rule_lang  SELECT * FROM  ps_cart_rule_lang;
INSERT INTO pr_cart_rule_product_rule  SELECT * FROM  ps_cart_rule_product_rule;
INSERT INTO pr_cart_rule_product_rule_group  SELECT * FROM  ps_cart_rule_product_rule_group;
INSERT INTO pr_cart_rule_product_rule_value  SELECT * FROM  ps_cart_rule_product_rule_value;
INSERT INTO pr_cart_rule_shop  SELECT * FROM  ps_cart_rule_shop;

Import kategorii i stron CMS

Jak widać opróźniamy zupełnie strony CMS z testowymi danymi dostarczone przez wydawcę oprogramowania. Natomiast pozostawiamy podstawowe 2 kategorie w systemie (bazową i kategorię ROOT).

Ogólnie często będziemy opróżniać niektóre tabele, bo moduł pscleaner nie kasuje wszystkich danych które nas interesują przy imporcie.

INSERT INTO pr_category  SELECT * FROM  ps_category WHERE ps_category.id_category>2;
INSERT INTO pr_category_group  SELECT * FROM  ps_category_group WHERE ps_category_group.id_category>2;
INSERT INTO pr_category_lang  SELECT * FROM  ps_category_lang WHERE ps_category_lang.id_category>2;
INSERT INTO pr_category_product  SELECT * FROM  ps_category_product WHERE ps_category_product.id_category>2;
INSERT INTO pr_category_shop  SELECT * FROM  ps_category_shop WHERE ps_category_shop.id_category>2;

TRUNCATE pr_cms;
TRUNCATE pr_cms_category;
TRUNCATE pr_cms_category_lang;
TRUNCATE pr_cms_category_shop;
TRUNCATE pr_cms_lang;
TRUNCATE pr_cms_role;
TRUNCATE pr_cms_role_lang;
TRUNCATE pr_cms_shop;

INSERT INTO pr_cms  SELECT * FROM  ps_cms;
INSERT INTO pr_cms_category  SELECT * FROM  ps_cms_category;
INSERT INTO pr_cms_category_lang  SELECT * FROM  ps_cms_category_lang;
INSERT INTO pr_cms_category_shop  SELECT * FROM  ps_cms_category_shop;
INSERT INTO pr_cms_lang  SELECT * FROM  ps_cms_lang;
INSERT INTO pr_cms_role  SELECT * FROM  ps_cms_role;
INSERT INTO pr_cms_role_lang  SELECT * FROM  ps_cms_role_lang;
INSERT INTO pr_cms_shop  SELECT * FROM  ps_cms_shop;

UWAGA! Po takim imporcie kategorii może być problem z pokazywaniem pełnego drzewa w module „Łącze drzewa kategorii„. Więcej informacji: https://pskrk.com/checklista-do-wykonania-po-instalacji-nowego-sklepu-prestashop-1-7/#22_Pokazywanie_pelnego_drzewa_w_bloku_z_kategoriami W takim wypadku po prostu dodaj nową kategorię w kategorii głownej i odśwież moduł od strony klienta. Zapewne PrestaShop musi nadpisać pozycje kategorii i cache tego modułu. Po tej operacji mozesz tą testową kategorię usunąć.

Import kont klientów i danych kastomizacji produktów

INSERT INTO pr_customer  SELECT * FROM  ps_customer;
INSERT INTO pr_customer_group  SELECT * FROM  ps_customer_group;
INSERT INTO pr_customer_message  SELECT * FROM  ps_customer_message;
INSERT INTO pr_customer_message_sync_imap  SELECT * FROM  ps_customer_message_sync_imap;
INSERT INTO pr_customer_session  SELECT * FROM  ps_customer_session;
INSERT INTO pr_customer_thread  SELECT * FROM  ps_customer_thread;
INSERT INTO pr_customization SELECT * FROM ps_customization;
INSERT INTO pr_customization_field SELECT * FROM ps_customization_field;
INSERT INTO pr_customization_field_lang SELECT * FROM ps_customization_field_lang;
INSERT INTO pr_customized_data SELECT * FROM ps_customized_data;

UPDATE! Przy imporcie niestandardowych grup musisz na docelowym sklepie upewnić się, że dana grupa posiada dostęp do wszystkich modułów w sklepie. Może to powodować problemy. Więcej informacji: https://pskrk.com/po-zalogowaniu-na-konto-klienta-znika-koszyk-z-produktami-sa-problemy-z-zamowieniem/

W tym miejscu też trzeba wspomnieć o bardzo istotnej rzeczy. Jeśli stare hasła klientów do ich kont ze sklepu PrestaShop 1.6 mają działać także w wersji PrestaShop 1.7 należy w pliku konfiguracyjnym wpisać tę samą wartość odpowiedniej zmiennej.

Na starym sklepie otwórz plik:

config/settings.inc.php

Znajdź w nim wartość _COOKIE_KEY_:

define('_COOKIE_KEY_', 'SWdx0frLjmtjcYRHcLZ6tEc6Vgr1n0WhuLtzPK9zoqPP34QrMDFY');

Tutaj, w tym przykłądzie będzie to (bez apostrofów):

SWdx0frLjmtjcYRHcLZ6tEc6Vgr1n0WhuLtzPK9zoqPP34QrMDFY

Nastepnie na nowym sklepie wklej ją analogicznie w pliku:

app/config/parameters.php

np.

wartość:

define('_COOKIE_KEY_', 'SzaM5Ae4eaA93We9lpZvBm2TOmtdiWnCtlZeEMBx4aw3MIQE2aS1');

podmień na tę ze starego pliku:

define('_COOKIE_KEY_', 'SWdx0frLjmtjcYRHcLZ6tEc6Vgr1n0WhuLtzPK9zoqPP34QrMDFY');

Tylko wtedy stare hasła, które importujesz do tabeli pr_customer – zadziałają. Musisz o tym pamiętać! W innym wypadku klienci będą mieli informację, że hasło jest niepoprawne i mogą wpać w konsternację.

Import dostawy oraz listy mailingowej

Jak widać musimy sobie dodatkowo pomóć przez poprawienie strukuty tabeli o prefixie ps_ a dokładniej dodajemy tam kolumnę językową id_lang:

TRUNCATE pr_delivery;
INSERT INTO pr_delivery  SELECT * FROM  ps_delivery;

ALTER TABLE `ps_emailsubscription` ADD `id_lang` INT(10) NOT NULL AFTER `active`; 
INSERT INTO pr_emailsubscription  SELECT * FROM  ps_emailsubscription;

Import cech

INSERT INTO pr_feature  SELECT * FROM  ps_feature;
INSERT INTO pr_feature_flag  SELECT * FROM  ps_feature_flag WHERE ps_feature_flag.id_feature_flag>1;
INSERT INTO pr_feature_lang  SELECT * FROM  ps_feature_lang;
INSERT INTO pr_feature_product  SELECT * FROM  ps_feature_product;
INSERT INTO pr_feature_shop  SELECT * FROM  ps_feature_shop;
INSERT INTO pr_feature_value  SELECT * FROM  ps_feature_value;
INSERT INTO pr_feature_value_lang  SELECT * FROM  ps_feature_value_lang;

Import grup

INSERT INTO pr_group  SELECT * FROM  ps_group WHERE ps_group.id_group>3;
INSERT INTO pr_group_lang  SELECT * FROM  ps_group_lang WHERE ps_group_lang.id_group>3;
INSERT INTO pr_group_reduction  SELECT * FROM  ps_group_reduction WHERE ps_group_reduction.id_group>3;
INSERT INTO pr_group_shop  SELECT * FROM  ps_group_shop WHERE ps_group_shop.id_group>3;

Import zdjęć produktów

I tu ważna uwaga! Kolejność kolumn w tabel ps_image_shop ma być taka: id_product, id_image, id_shop, cover. Zmienisz ją tak jak pokazano na screenie wyżej w PHPmyAdmin.

Dodatkowo te 2 tabele mogą wymagać najpierw dodania kolumny „rotator”:

ALTER TABLE `ps_image` ADD `rotator` TINYINT(1) NULL AFTER `cover`;
ALTER TABLE `ps_image_shop` ADD `rotator` TINYINT(1) NULL AFTER `cover`;
INSERT INTO pr_image  SELECT * FROM  ps_image;
INSERT INTO pr_image_lang  SELECT * FROM  ps_image_lang;
INSERT INTO pr_image_shop  SELECT * FROM  ps_image_shop;

Import producentów i wiadomości

INSERT INTO pr_manufacturer  SELECT * FROM  ps_manufacturer;
INSERT INTO pr_manufacturer_lang  SELECT * FROM  ps_manufacturer_lang;
INSERT INTO pr_manufacturer_shop  SELECT * FROM  ps_manufacturer_shop;
INSERT INTO pr_message SELECT * FROM ps_message;
INSERT INTO pr_message_readed SELECT * FROM ps_message_readed;

Import zamówień

Tutaj będzie parę korekt. Najlepiej wykonaj je przed importem albo upewnij się, że istotnie są konieczne.

Po pierwsze: tabela ps_order_detail – kolumna product_isbn musi być nad product_upc a pod product_ean13 (czyli pomiędzy nimi). Czyli operacja przesuwania kolumn w PHPmyAdmin opisana wyżej.

Usuń tę kolumę ze starej tabeli o prefixie ps_:

ALTER TABLE `ps_order_invoice` DROP `company_address`;

Zwiększ wielkość tych pół w – uwaga! – nowych tabelach o prefixie pr_:

ALTER TABLE `pr_order_payment` CHANGE `order_reference` `order_reference` VARCHAR(100) NULL DEFAULT NULL; 
ALTER TABLE `pr_orders` CHANGE `reference` `reference` VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL;

OK oto zapytania do importu:

INSERT INTO pr_order_carrier  SELECT * FROM  ps_order_carrier;
INSERT INTO pr_order_cart_rule  SELECT * FROM  ps_order_cart_rule;
INSERT INTO pr_order_detail  SELECT * FROM  ps_order_detail;
INSERT INTO pr_order_detail_tax  SELECT * FROM  ps_order_detail_tax;
INSERT INTO pr_order_history  SELECT * FROM  ps_order_history;
INSERT INTO pr_order_invoice  SELECT * FROM  ps_order_invoice;
INSERT INTO pr_order_invoice_payment  SELECT * FROM  ps_order_invoice_payment;
INSERT INTO pr_order_invoice_tax  SELECT * FROM  ps_order_invoice_tax;
INSERT INTO pr_order_message  SELECT * FROM  ps_order_message;
INSERT INTO pr_order_message_lang  SELECT * FROM  ps_order_message_lang;
INSERT INTO pr_order_payment  SELECT * FROM  ps_order_payment;

TRUNCATE pr_order_return;
TRUNCATE pr_order_return_detail;
TRUNCATE pr_order_return_state;
TRUNCATE pr_order_return_state_lang;

INSERT INTO pr_order_return  SELECT * FROM  ps_order_return;
INSERT INTO pr_order_return_detail  SELECT * FROM  ps_order_return_detail;
INSERT INTO pr_order_return_state  SELECT * FROM  ps_order_return_state;
INSERT INTO pr_order_return_state_lang  SELECT * FROM  ps_order_return_state_lang;
INSERT INTO pr_order_slip  SELECT * FROM  ps_order_slip;
INSERT INTO pr_order_slip_detail  SELECT * FROM  ps_order_slip_detail;
TRUNCATE pr_order_state;
TRUNCATE pr_order_state_lang;
INSERT INTO pr_order_state  SELECT * FROM  ps_order_state;
INSERT INTO pr_order_state_lang  SELECT * FROM  ps_order_state_lang;
INSERT INTO pr_orders  SELECT * FROM  ps_orders;
INSERT INTO pr_pack  SELECT * FROM  ps_pack;

Import produktów

Konieczne korekty w strukturze kolumn:

  1. w ps_product kolumna isbn ma być pod ean13
  2. w ps_product_attribute kolumna isbn ma być pod ean13
  3. w ps_product_attribute_shop kolumna id_product ma być na początku listy kolumn
INSERT INTO pr_product  SELECT * FROM  ps_product;
INSERT INTO pr_product_attachment  SELECT * FROM  ps_product_attachment;
INSERT INTO pr_product_attribute  SELECT * FROM  ps_product_attribute;
INSERT INTO pr_product_attribute_combination  SELECT * FROM  ps_product_attribute_combination;
INSERT INTO pr_product_attribute_image  SELECT * FROM  ps_product_attribute_image;
INSERT INTO pr_product_attribute_shop  SELECT * FROM  ps_product_attribute_shop;
INSERT INTO pr_product_carrier  SELECT * FROM  ps_product_carrier;
INSERT INTO pr_product_download  SELECT * FROM  ps_product_download;
INSERT INTO pr_product_lang  SELECT * FROM  ps_product_lang;
INSERT INTO pr_product_sale  SELECT * FROM  ps_product_sale;
INSERT INTO pr_product_shop  SELECT * FROM  ps_product_shop;
INSERT INTO pr_product_supplier  SELECT * FROM  ps_product_supplier;
INSERT INTO pr_product_tag  SELECT * FROM  ps_product_tag;

Import zakresów cenowych i wagowych

TRUNCATE pr_range_price;
TRUNCATE pr_range_weight;

INSERT INTO pr_range_price  SELECT * FROM  ps_range_price;
INSERT INTO pr_range_weight  SELECT * FROM  ps_range_weight;

Import sklepów (multistore)

Korekty:

  1. W ps_shop kolumna color ma być ostatnia
  2. W ps_shop_group kolumna color ma być ostatnia
TRUNCATE pr_shop;
TRUNCATE pr_shop_group;
TRUNCATE pr_shop_url;

INSERT INTO pr_shop  SELECT * FROM  ps_shop;
INSERT INTO pr_shop_group  SELECT * FROM  ps_shop_group;
INSERT INTO pr_shop_url  SELECT * FROM  ps_shop_url;

Import przecen i tabeli ilościowej

INSERT INTO pr_specific_price  SELECT * FROM  ps_specific_price;
INSERT INTO pr_specific_price_priority  SELECT * FROM  ps_specific_price_priority;
INSERT INTO pr_specific_price_rule  SELECT * FROM  ps_specific_price_rule;
INSERT INTO pr_specific_price_rule_condition  SELECT * FROM  ps_specific_price_rule_condition;
INSERT INTO pr_specific_price_rule_condition_group  SELECT * FROM  ps_specific_price_rule_condition_group;
INSERT INTO pr_stock  SELECT * FROM  ps_stock;
INSERT INTO pr_stock_available  SELECT * FROM  ps_stock_available;

Import dostawców i magazynu

INSERT INTO pr_supplier  SELECT * FROM  ps_supplier;
INSERT INTO pr_supplier_lang  SELECT * FROM  ps_supplier_lang;
INSERT INTO pr_supplier_shop  SELECT * FROM  ps_supplier_shop;
INSERT INTO pr_supply_order  SELECT * FROM  ps_supply_order;
INSERT INTO pr_supply_order_detail  SELECT * FROM  ps_supply_order_detail;
INSERT INTO pr_supply_order_history  SELECT * FROM  ps_supply_order_history;
INSERT INTO pr_supply_order_receipt_history  SELECT * FROM  ps_supply_order_receipt_history;
INSERT INTO pr_warehouse  SELECT * FROM  ps_warehouse;
INSERT INTO pr_warehouse_carrier  SELECT * FROM  ps_warehouse_carrier;
INSERT INTO pr_warehouse_product_location  SELECT * FROM  ps_warehouse_product_location;
INSERT INTO pr_warehouse_shop  SELECT * FROM  ps_warehouse_shop;

Import podatków

Jeżeli reguły podatkowe mają działać analogicznie do starego sklepu wykonaj te zapytania:

TRUNCATE pr_tax;
INSERT INTO pr_tax SELECT * FROM ps_tax;

TRUNCATE pr_tax_lang;
INSERT INTO pr_tax_lang SELECT * FROM ps_tax_lang;

TRUNCATE pr_tax_rule;
INSERT INTO pr_tax_rule SELECT * FROM ps_tax_rule;

TRUNCATE pr_tax_rules_group;
INSERT INTO pr_tax_rules_group SELECT * FROM ps_tax_rules_group;

TRUNCATE pr_tax_rules_group_shop;
INSERT INTO pr_tax_rules_group_shop SELECT * FROM ps_tax_rules_group_shop;

Import krajów, stref

Jeśli Twój stary sklep posiadał przypisanie np. przewoźników do określonych stref to musisz wykonać poniższe zapytania:

TRUNCATE pr_country;
INSERT INTO pr_country  SELECT * FROM  ps_country;

TRUNCATE pr_country_lang;
INSERT INTO pr_country_lang  SELECT * FROM  ps_country_lang;

TRUNCATE pr_country_shop;
INSERT INTO pr_country_shop  SELECT * FROM  ps_country_shop;

TRUNCATE pr_state;
INSERT INTO pr_state  SELECT * FROM  ps_state;

TRUNCATE pr_zone;
INSERT INTO pr_zone  SELECT * FROM  ps_zone;

TRUNCATE pr_zone_shop;
INSERT INTO pr_zone_shop  SELECT * FROM  ps_zone_shop;

Bez importu tych tabel zobaczysz w koszyku problem podczas wyboru dostawy:

Niestety, brak dostępnych przewoźników dla Twojego adresu dostawy.

Albo natkniesz się na problemy opisywane tutaj:

Irytujący problem z wyświetlaniem przewoźników – „nie ma dostępnych przewoźników” [Presta Shop 1.6.1.4]

I jak udało Ci się tutaj dotrzeć… to znaczy, że masz zupełnie nową instalację PrestaShop 1.7 z danymi ze starego sklepu. Gratulacje ! 🙂

Dodatkowe prace – przebudowa miniatur

Prawdopodobnie Twój sklep będzie wymagał przebudowania miniatur. Wejdź w dział:

Wygląd -> Zdjęcia -> Wygeneruj ponownie miniatury 

Następnie przebuduj (usuwając stare) wszystkie miniatury produktów /kategorii /marek itp. Wtedy na podstawie wcześniej wgranych oryginałów zdjęć – skrypt wygeneruje nowe kadry do nowego szablonu.

Jeśli posiadasz dużą ilość produktów będziesz musiał/a rozdzielić generowanie na poszczególne typy zdjeć (cart_default, home_default itd.) aby ten proces podzielić w maskymalnym czasie wykonania dla Twojego serwera.

Usunięcie zbędnych tabel

Ostatnim krokiem po skończonym imporcie jest usunięcie tabel o prefixie ps_ nie będą one potrzebne do prawidłowego funkcjonowania sklepu w nowej odsłonie.

Oferta wykonania akutalizacji sklepu PrestaShop

Tak czy inaczej jeśli nie czujesz się na siłach – zapraszamy do skorzystania z naszej oferty:

grafika: wallpapersafari.com

  1. JonhDoe JonhDoe

    Coś tu nie rozumiem. Niby mowa jest o przeniesieniu bazy z 1.6 do 1.7 ale na początku jest info
    (AKTUALIZACJA: UWAGA!)
    że obie bazy mają być zaktualizowane modułem do najwyższych wersji? To znaczy jak mam sklep 1.6.1.18 (gdzie ostatnią wersją jest 1.6.1.24) i mam świeżą instalację obok 1.7.8.2 to mam podnieść 1.6.1.18 poprzez 1.6.1.24 aż do 1.7.x.x? Przecież to nie wykonalne.

    Cały szkopuł w tym że skrypty SQL muszą być tak popisane żeby uwzględnić różnice między bazami 1.6 i 1.7.

    • Admin Admin

      Najpierw zakualizuj (najlepiej na klonie sklepu) modułem autoupgrade do najnowszej 17 a potem przenieś zawartości tabel do czystej instalacji ps 17 o tym samym numerze.

      • IS IS

        Przy imporcie zdjęć (ps_image) oraz produktów (ps_product) mam komunikat:
        #1136 – Column count doesn’t match value count at row 1

        może wie Pan gdzie leży problem i jak go rozwiązać?
        Będę wdzięczny za odpowiedź.

        • Admin Admin

          Należy zrobić identyczną listę kolumn w obu tabelach i ich kolejność (typ danych każdej kolumny) musi się zgadzać

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
Jak usunąć zdublowaną wyszukiwarkę na sklepie PrestaShop 1.7