Бортовой журнал Ктулху

Prestashop: экспорт товаров без модулей

Не секрет, что родной экспорт в Prestashop кривой до безобразия, например в 1.5 экспортируется только 50 товаров. В версии 1.4 был модуль экспорта, но тоже не без приключений с ним работалось.

 

Что за зверь - SQL Manager?

sql manager

 

Этот инструмент позволяет выполнять запросы к БД и сохранять их в виде элементов. В любой момент можно выполнить любой из сохраненных запросов.

В колонке слева выводятся все таблицы.

 

00d87bdf31

 

При клике на таблицу выводятся поля этой таблицы, которые можно добавить в текстовое поле запроса.

eecbc7b065

 

Результат запроса сохраняется в CSV, что собственно и нужно.

 

Шаг 1 - Таблица продукции

 

Начнем с данных из таблицы ps_product. Пожалуйста, обратите внимание, что "ps_" является префиксом по умолчанию, и у вас может быть по-другому. Если это ваш случай, замените "ps_" своим префиксом.

"SELECT p.id_product, p.active, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default
FROM ps_product p
GROUP BY p.id_product"

 GROUP BY здесь используется во избежание дублирования товаров.

Также пришлось исключить поле EAN13, так как, по некоторым причинам, менеджер SQL не понимает числа в именах столбцов.

 

Шаг 2 - Языковые поля

 

SELECT p.id_product, p.active, pl.name, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product) WHERE pl.id_lang = 1

Таким образом, мы добавили несколько условий поиска, в таблице ps_product_lang, мы устанавливаем язык равным 1, это будет язык по умолчанию.

 

Шаг 3 - Добавляем категории

 С каждым шагом все сложнее и сложнее.

SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product) LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category)
WHERE pl.id_lang = 1
AND cl.id_lang = 1
GROUP BY p.id_product

На данном этапе  извлечение категорий в виде строки, разделенной запятыми, так как это разделитель по умолчанию для нескольких значений в Prestashop CSV Импорт Tool. 

 

Шаг 4 - Финиш

SELECT p.id_product, p.active, pl.name, GROUP_CONCAT(DISTINCT(cl.name) SEPARATOR ",") as categories, p.price, p.id_tax_rules_group, p.wholesale_price, p.reference, p.supplier_reference, p.id_supplier, p.id_manufacturer, p.upc, p.ecotax, p.weight, p.quantity, pl.description_short, pl.description, pl.meta_title, pl.meta_keywords, pl.meta_description, pl.link_rewrite, pl.available_now, pl.available_later, p.available_for_order, p.date_add, p.show_price, p.online_only, p.condition, p.id_shop_default
FROM ps_product p
LEFT JOIN ps_product_lang pl ON (p.id_product = pl.id_product)
LEFT JOIN ps_category_product cp ON (p.id_product = cp.id_product)
LEFT JOIN ps_category_lang cl ON (cp.id_category = cl.id_category)
LEFT JOIN ps_category c ON (cp.id_category = c.id_category)
LEFT JOIN ps_product_tag pt ON (p.id_product = pt.id_product)
WHERE pl.id_lang = 1
AND cl.id_lang = 1
AND p.id_shop_default = 1 AND c.id_shop_default = 1
GROUP BY p.id_product

Если у вас есть несколько магазинов, не забудьте добавить и id_default_shop = 1 для каждой таблицы, которая имеет несколько значений "магазины". 

 

Источник