Press "Enter" to skip to content

Szybki import produktów z PrestaShop 1.6 do PrestaShop 1.7

Admin 4

Na czym to polega?

Istnieje sposób stosunkowo szybkiego i efektywnego importu produtków ze sklepu PrestaShop 1.6 do PrestaShop 1.7. Chodzi tutaj o postawowe wypełnienie tabel po stronie MySQL. A dokłądnie kopiowanie danych pomiędzy tabelami.

Przykład pokazuje jak to zrobić w sklepie PrestaShop 1.7 w który mnie ma żadnego asortymentu i jest on wyczyszczony przez moduł pscleaner. W tym celu zainstaluj ten właśnie moduł w instalacji PrestaShop 1.7 (znajduje się on w Katalogu Modułów i jest darmowy). Za jego pomocą możesz usunąć dane testowe ze sklepu. Uwaga! Jeśli w sklepie są dane produktów lub kategorie – zostaną one bezpowrotnie utracone (o ile nie wykonasz kopii bezpieczeństwa). Pamietaj, że moduł także usuwa zdjęcia produktów. Dlatego nasz artykuł jest dedykowany do wykonywania importu na „czystej” instalacji PrestaShop 1.7

Oczywiście nasz import to nie jest złoty środek na przeniesienie asortymentu ze sklepu A do sklepu B. Pozwala zaoszczędzić czas, jednak wiele danych należy potem pouzupełniać ręcznie. Jak atrybuty, cechy, reguły podatkowe itp. Warto podkreślić, że pokazany tutaj sposób jest niezwykle skuteczny nawet przy gigantycznej ilości produktów (kilkaset tysięcy produktów i więcej), bo zapytania po stronie MySQL są niezwykle efektywne i znacznie szybsze niż klasyczny import za pomocą plików CSV.

Postawowe informacje.

Wersja silinika 1.7:  PrestaShop 1.7.5.0
Wersja silnika 1.6: PrestaShop 1.6.1.18

Jest to o tyle ważne, że poszczególne wersje np. w gałęzi 1.6 mogą się różnić nazwami i liczbą kolumn. Nalezy wówczas nasze zapytania odpowiednio skorygować.

Prefix w tabeli PrestaShop 1.7:   pr_
Prefix w tabeli PrestaShop 1.6:   bg_

Jeśli masz inne prefixy – odpowiednio zmodyfikuj nasze zapytania.

Uwaga! Tabele w bazach danych dla poszczególnych wersji sklepu nie mogą mieć identycznych prefixów. Należy przed przystąpieniem do prac je zmienić. Więcej informacji jak hurtowo zmienic prefixy: https://stackoverflow.com/questions/2466101/how-i-can-change-prefixes-in-all-tables-in-my-mysql-db  albo https://richjenks.com/change-mysql-database-table-prefix/

Jak zacząć?

Po pierwsze primo: Wykonaj kopię bezpieczeństwa bazy danych.

Musisz mieć też dostęp najlepiej do PhpMyAdmin serwera gdzie jest ulokowany sklep. Realizacja zapytań będzie dużo łatwiejsza. Następnie do bazy danych sklepu 1.7 wgrywasz dump bazy danych (np. tą z działu Zaawansowane -> Kopia bezpieczeństwa) sklepu 1.6 poprzez zakładkę Import w menu PhpMyAdmin

Następnie realizujesz zapytania wg kolejności. Oczywiście muszą one uwzględniać Twoje prefixy tabel dla obu wersji sklepów.

Zapytania są realizowane w zakładce SQL w programie PhpMyAdmin albo bezpośrednio w linii komend MySQL (konsola Linux).

Import tabeli produktowej:

INSERT INTO `pr_product` 
(id_product,
id_supplier,
id_manufacturer,
id_category_default,
id_shop_default,
id_tax_rules_group,
on_sale,
online_only,
ean13,
upc,
ecotax,
quantity,
minimal_quantity,
price,
wholesale_price,
unity,
unit_price_ratio,
additional_shipping_cost,
reference,
supplier_reference,
location,
width,
height,
depth,
weight,
out_of_stock,
quantity_discount,
customizable,
uploadable_files,
text_fields,
active,
redirect_type,
available_for_order,
available_date,
`condition`,
show_price,
indexed,
visibility,
cache_is_pack,
cache_has_attachments,
is_virtual,
cache_default_attribute,
date_add,
date_upd,
advanced_stock_management,
pack_stock_type) 
SELECT 
id_product,
id_supplier,
id_manufacturer,
id_category_default,
id_shop_default,
id_tax_rules_group,
on_sale,
online_only,
ean13,
upc,
ecotax,
quantity,
minimal_quantity,
price,
wholesale_price,
unity,
unit_price_ratio,
additional_shipping_cost,
reference,
supplier_reference,
location,
width,
height,
depth,
weight,
out_of_stock,
quantity_discount,
customizable,
uploadable_files,
text_fields,
active,
redirect_type,
available_for_order,
available_date,
`condition`,
show_price,
indexed,
visibility,
cache_is_pack,
cache_has_attachments,
is_virtual,
cache_default_attribute,
date_add,
date_upd,
advanced_stock_management,
pack_stock_type
FROM `bg_product`

Import tabeli produktowej z multistore:

INSERT INTO `pr_product_shop` 
(id_product,
id_shop,
id_category_default,
id_tax_rules_group,
on_sale,
online_only,
ecotax,
minimal_quantity,
price,
wholesale_price,
unity,
unit_price_ratio,
additional_shipping_cost,
customizable,
uploadable_files,
text_fields,
active,
redirect_type,
available_for_order,
available_date,
`condition`,
show_price,
indexed,
visibility,
cache_default_attribute,
advanced_stock_management,
date_add,
date_upd,
pack_stock_type)
SELECT
id_product,
id_shop,
id_category_default,
id_tax_rules_group,
on_sale,
online_only,
ecotax,
minimal_quantity,
price,
wholesale_price,
unity,
unit_price_ratio,
additional_shipping_cost,
customizable,
uploadable_files,
text_fields,
active,
redirect_type,
available_for_order,
available_date,
`condition`,
show_price,
indexed,
visibility,
cache_default_attribute,
advanced_stock_management,
date_add,
date_upd,
pack_stock_type
FROM `bg_product_shop`

Import tabeli produktowej – językowej:

INSERT INTO `pr_product_lang` 
(id_product,
 id_shop,
 id_lang,
 description,
 description_short,
 link_rewrite,
 meta_description,
 meta_keywords,
 meta_title,
 name,
 available_now,
 available_later) 
SELECT 
id_product,
 id_shop,
 id_lang,
 description,
 description_short,
 link_rewrite,
 meta_description,
 meta_keywords,
 meta_title,
 name,
 available_now,
 available_later 
FROM `bg_product_lang`

Zapytania czyszczące:

update pr_product set show_condition = 1;

update pr_product_shop set show_condition = 1;

TRUNCATE pr_category_product;

INSERT INTO pr_category_product (id_product,id_category)
SELECT id_product, 2
FROM   pr_product;

update pr_product_lang SET description = '' WHERE description IS NULL;

update pr_product_lang SET description_short = '' WHERE description_short IS NULL;

Import zdjęć.

Przy okazji poniższego zapytania należy przenieść folder z instalacji PrestaShop 1.6

img/p

w to samo miejsce w instalacji 1.7

INSERT pr_image SELECT * FROM bg_image;
INSERT pr_image_lang SELECT * FROM bg_image_lang;
INSERT pr_image_shop SELECT * FROM bg_image_shop;

I to w zasadzie tyle. Po wykonaniu powyższych zapytań w zakłądce Katalog -> Produkty powinny pojawić się identyczna lista produktów jak w sklepie o starszej wersji.

Daj znać czy Ci to pomogło!

grafika: nicepik.com

  1. Adam Adam

    Witam

    Dziękuję za poradnik ale mam problem.

    Jeśli wszystko zrobiłem według wytycznych, w bazie phpmyadmin pokazuje produkty importowane a w sklepie w adminie pusto w zakładce produkty to gdzie szukać przyczyny?

    Dziękuję

  2. Wojtek Wojtek

    Potwierdzam. Mam to samo walczę od kilku dni i nie wiem jaki jest powód

  3. Maciej Maciej

    Dokładnie mam taki sam problem. Czy zna ktoś rozwiązanie ? Produkty są przypisane do kategorii w sklepie natomiast na zapleczu (panel administratora ) nie pokazują się w kategorii>produkty. Można je znaleźć poprzez wyszukiwanie w panelu administratora i wtedy pojawiają się i można je edytować. Czy autor bloga pomoże 🙂

    Pozdrawiam
    Maciej

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 poradzić sobie z niedziałającym tłumaczeniem niektórych modułów w zakupionym…