Налаштування імпорту/експорту товарів Magento 2
Імпорт/експорт — одна з найбільш навантажених операцій в Magento 2. Вбудований механізм працює через CSV з жорсткою схемою колонок. При неправильній конфігурації імпорт 10 000 SKU може займати кілька годин та падати з memory/timeout помилками. Правильне налаштування batch-розмірів, індексації та управління пам'яттю вирішує більшість проблем.
Формати та структура CSV
Magento 2 підтримує імпорт: catalog_product, catalog_category, customer, customer_address, customer_finance, stock_sources (MSI).
Обов'язкові колонки для товарів:
| Колонка | Опис | Приклад |
|---|---|---|
sku |
Унікальний ідентифікатор | prod-001 |
store_view_code |
Пусто = admin scope | en, de |
attribute_set_code |
Набір атрибутів | Default |
product_type |
Тип товару | simple, configurable |
name |
Назва | Зимова куртка |
price |
Ціна | 1299.00 |
qty |
Кількість (legacy, без MSI) | 100 |
visibility |
Видимість | Catalog, Search |
status |
Статус | 1 |
Для конфігурованих товарів потрібні додаткові колонки: configurable_variations та configurable_variation_labels.
sku,attribute_set_code,product_type,name,price,configurable_variations,configurable_variation_labels
jacket-base,Default,configurable,Зимова куртка,1299.00,"sku=jacket-red-s,color=Red,size=S|sku=jacket-red-m,color=Red,size=M","Color=Колір,Size=Розмір"
jacket-red-s,Default,simple,Зимова куртка Червона S,1299.00,,,
jacket-red-m,Default,simple,Зимова куртка Червона M,1299.00,,,
Оптимізація продуктивності
Дефолтні налаштування Magento не розраховані на великі обсяги. Ключові параметри в app/etc/env.php та конфігурації сервера:
// Збільшення batch-розміру для імпорту
// app/code/Vendor/Import/etc/di.xml
<type name="Magento\ImportExport\Model\Import">
<arguments>
<argument name="data" xsi:type="array">
<item name="bunch_size" xsi:type="number">500</item>
</argument>
</arguments>
</type>
# php.ini для процесів імпорту
memory_limit = 2G
max_execution_time = 3600
max_input_time = 3600
# Відключення ненужних індексаторів під час імпорту
bin/magento indexer:set-mode schedule cataloginventory_stock catalog_product_price catalogsearch_fulltext
Імпорт через CLI та API
Для автоматизації використовуйте CLI-команду або REST API:
# Стандартний імпорт через CLI
bin/magento import:run \
--entity=catalog_product \
--behavior=append \
--validation-strategy=validation-skip-errors \
--allowed-error-count=100 \
--input-file=var/import/products.csv
# З указанням розділювача та кодування
bin/magento import:run \
--entity=catalog_product \
--behavior=add_update \
--field-separator=";" \
--multiple-value-separator="|" \
--input-file=var/import/products_semicolon.csv
REST API для імпорту (Magento 2.3+):
# Створення job через API
curl -X POST "https://example.com/rest/V1/import/csv" \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"source": {
"entity": "catalog_product",
"behavior": "append",
"validationStrategy": "validation-stop-on-errors",
"allowedErrorCount": "0",
"csvData": "c2t1LG5hbWUscHJpY2U..."
}
}'
Налаштування експорту
Експорт в Magento 2 працює через такі ж фільтри, що й імпорт. Для великих каталогів потрібен асинхронний експорт через scheduled export:
// Програмний експорт через ExportFactory
use Magento\ImportExport\Model\ExportFactory;
class ProductExporter
{
public function __construct(private ExportFactory $exportFactory) {}
public function export(array $filters = []): string
{
$export = $this->exportFactory->create();
$export->setData([
'entity' => 'catalog_product',
'file_format' => 'csv',
'fields_enclosure' => 1,
]);
$export->filterAttributeCollection(
$export->getEntityAttributeCollection()
);
return $export->export();
}
}
Імпорт MSI (Multi-Source Inventory)
З Magento 2.3+ для управління складами використовується MSI. Імпорт остатків по джерелам:
source_code,sku,quantity,status
warehouse-moscow,jacket-red-s,50,1
warehouse-spb,jacket-red-s,30,1
warehouse-moscow,jacket-red-m,0,0
bin/magento import:run \
--entity=stock_sources \
--behavior=append \
--input-file=var/import/stock_msi.csv
Типові проблеми та їх рішення
Memory exhausted: збільшіть memory_limit до 2–4G, зменшіть bunch_size до 200–300 записів.
URL key already exists: при поведінці append Magento перевіряє унікальність URL. Використовуйте add_update або очистіть таблицю url_rewrite перед імпортом.
Invalid value for Attribute Set: значення в attribute_set_code повинне точно совпадати з іменем в базі — регістр важливий.
Повільна індексація після імпорту: при режимі індексаторів realtime кожен bunch запускає індексацію. Переключіть на schedule, виконайте імпорт, потім запустіть індексацію вручну:
bin/magento indexer:reindex catalog_product_attribute catalog_product_price catalogsearch_fulltext catalog_product_category
Термін виконання
- Налаштування та тест імпорту до 1 000 SKU: 1 день
- Розробка кастомного адаптера для ERP-синхронізації: 3–5 днів
- Налаштування scheduled import з моніторингом помилок: 2–3 дні
- Міграція каталогу 50 000+ SKU з іншої платформи: 5–10 днів







