Как импортировать продукты с вариациями в Shopware 6Php

Кемеровские программисты php общаются здесь
Anonymous
Как импортировать продукты с вариациями в Shopware 6

Сообщение Anonymous »

Я пытаюсь импортировать продукты из XML с вариантами.
Импорт продуктов пока работает, но варианты не создаются.
Вот мой код (упрощенный):

Код: Выделить всё

    /**
* @return int
* @throws \Exception
*/
public function execute()
{
// avoid reaching memory limit
ini_set('memory_limit', '-1');

// set tax id
$this->setTaxId();
if (empty($this->taxId)) {
return 1;
}

// read products from import xml file
$importProducts = $this->loadProducts();
$csvBatch = array_chunk($importProducts, self::BATCH);
$productNumbers = [];

foreach ($csvBatch as $products) {
$productNumbers[] = $this->processImportProducts($products, false);
}

$this->deleteProducts(array_merge(...$productNumbers));

return 0;
}

/**
* @param $productsData
* @param $progressBar
* @return array
*/
private function processImportProducts($productsData, $progressBar)
{
$products = [];
$productNumbers = [];

foreach ($productsData as $product) {
$products[$product['SKU']['@cdata']] = $this->importProducts($product, $progressBar);
$productNumbers[] = $product['SKU']['@cdata'];
}

// upsert product
try {
$this->cleanProductProperties($products, $this->context);
$this->productRepository->upsert(array_values($products), $this->context);
} catch (WriteException $exception) {
$this->logger->info(' ');
$this->logger->info('Products could not be imported. Message: '. $exception->getMessage() .'');
}
unset($products);

return $productNumbers;
}

/**
* @param $product
* @param $progressBar
* @return array
*/
private function importProducts($product, $progressBar)
{
...

$productData = [
'id' => $productId,
'productNumber' => $productNumber,
'price' => [
[
'currencyId' => Defaults::CURRENCY,
'net' => !empty($product['net']) ? $product['net'] : 0,
'gross' => !empty($product['net']) ? $product['net'] : 0,
'linked' => true
]
],
'stock' => 99999,
'unit' => [
'id' => '3fff95a8077b4f5ba3d1d2a41cb53fab'
],
'unitId' => '3fff95a8077b4f5ba3d1d2a41cb53fab',
'taxId' => $this->taxId,
'name' => $productNames,
'description' => $productDescriptions
];

if(isset($product['Variations'])) {
$variationIds = $product['Variations']['@cdata'] ?? '';
$productData['variation'] = [$this->getProductVariationIds($variationIds)];
}

return $productData;
}

/**
* Get product variation ids
*
* @param string $productVariations
* @return string
*/
private function getProductVariationIds($productVariations)
{
$productVariationIds = explode(',', $productVariations);
// get product variationIds in form of a string list
$ids = $this->productRepository->search(
(new Criteria())->addFilter(new EqualsAnyFilter('productNumber', $productVariationIds)),
$this->context
)->getIds();

return implode(',', $ids);
}
Идентификаторы загружаются правильно, но ничего не происходит. Тоже без ошибок.
Есть идеи, как импортировать варианты?

Подробнее здесь: https://stackoverflow.com/questions/746 ... shopware-6

Вернуться в «Php»