Импорт пользовательских сопутствующих товаров через CSV - PullRequest
0 голосов
/ 23 октября 2019

0

Я создал пользовательскую вкладку для Альтернативных продуктов и должен импортировать SKU через CSV, как related_sku в CSV. Я не могу импортировать свои продукты на вкладке пользовательских альтернативных продуктов в бэк-энде продукта. Пожалуйста, расскажите, как мне добиться этого импорта с помощью CSV.

Я попытался добавить дополнения в модуль импорта core magento, чтобы увидеть, импортируется ли новое поле и связано ли оно с альтернативными продуктами

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Попробуйте этот патч, если вы уже создали новый тип отношений в вашем модуле.
Проверено на версии Magento 2.3.1

diff --git a/vendor/magento/module-catalog-import-export/Model/Import/Product.php b/vendor/magento/module-catalog-import-export/Model/Import/Product.php
index dc9d219..0e19ef8 100644
--- a/vendor/magento/module-catalog-import-export/Model/Import/Product.php
+++ b/vendor/magento/module-catalog-import-export/Model/Import/Product.php
@@ -226,6 +226,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
         '_related_' => \Magento\Catalog\Model\Product\Link::LINK_TYPE_RELATED,
         '_crosssell_' => \Magento\Catalog\Model\Product\Link::LINK_TYPE_CROSSSELL,
         '_upsell_' => \Magento\Catalog\Model\Product\Link::LINK_TYPE_UPSELL,
+        '_custom_related_' => \vendor\Module\Model\Product::LINK_TYPE_CUSTOM_RELATED,
     ];

     /**
@@ -334,6 +335,8 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
         'min_sale_qty' => 'min_cart_qty',
         'max_sale_qty' => 'max_cart_qty',
         'notify_stock_qty' => 'notify_on_stock_below',
+        '_custom_related_sku' => 'custom_related_sku',
+        '_custom_related_position' => 'custom_related_position',
         '_related_sku' => 'related_skus',
         '_related_position' => 'related_position',
         '_crosssell_sku' => 'crosssell_skus',
@@ -1257,7 +1260,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
         $nextLinkId = $this->_resourceHelper->getNextAutoincrement($mainTable);

         // pre-load 'position' attributes ID for each link type once
-        foreach ($this->_linkNameToId as $linkName => $linkId) {
+        foreach ($this->getLinkNameToId() as $linkName => $linkId) {
             $select = $this->_connection->select()->from(
                 $resource->getTable('catalog_product_link_attribute'),
                 ['id' => 'product_link_attribute_id']
@@ -1292,7 +1295,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
                     $linkKey = "{$productId}-{$linkData['linked_id']}-{$linkData['link_type_id']}";
                     $productLinkKeys[$linkKey] = $linkData['id'];
                 }
-                foreach ($this->_linkNameToId as $linkName => $linkId) {
+                foreach ($this->getLinkNameToId() as $linkName => $linkId) {
                     $productIds[] = $productId;
                     if (isset($rowData[$linkName . 'sku'])) {
                         $linkSkus = explode($this->getMultipleValueSeparator(), $rowData[$linkName . 'sku']);
@@ -2333,6 +2336,16 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     }

     /**
+     * Attribute set ID-to-name pairs getter.
+     *
+     * @return array
+     */
+    public function getLinkNameToId()
+    {
+        return $this->_linkNameToId;
+    }
+
+    /**
      * DB connection getter.
      *
      * @return \Magento\Framework\DB\Adapter\AdapterInterface
0 голосов
/ 07 ноября 2019

Чтобы импортировать пользовательское поле и его значение с помощью csv, в вашем пользовательском модуле используйте следующее событие

'catalog_product_import_bunch_save_after'

Например, если поле alternative_product_skus добавляется какнастраиваемое поле в csv (добавить столбец с этим именем в CSV) и его значения sku1, sku2, sku3

Вы можете получить эти значения, используя событие "catalog_product_import_bunch_save_after"

Поставщик / Модуль / etc / adminhtml / events.html

<?xml version="1.0" encoding="UTF-8" ?>
<config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
        xsi:noNamespaceSchemaLocation='urn:magento:framework/Event/etc/events.xsd'>
    <event name="catalog_product_import_bunch_save_after">
        <observer name="vendor_module_catalog_product_import_bunch_save_after" instance="Vendor\Module\Observer\CatalogProductImportBunchSaveAfter" />
    </event>
</config>

Поставщик / Модуль / Наблюдатель / CatalogProductImportBunchSaveAfter.php

<?php

namespace Vendor\Module\Observer;

use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;

class CatalogProductImportBunchSaveAfter implements ObserverInterface
{
    public function execute(\Magento\Framework\Event\Observer $observer)
    {
        try{
            $bunch = $observer->getBunch();
            foreach($bunch as $product) {
                // here you can get the row as a product object and get custom field value
                $alternativeProducts = $product['alternative_product_skus'];
                /*
                  ....
                  custom code to assign this values to the product
                  ....
                */
            }
        }catch (\Execption $e) {
            $e->getMessage(); 
        }
    }
}
...