हमने एक ही मुद्दे का अनुभव किया है, ऐसा लगता है कि आयात मॉड्यूल में संबंधित उत्पादों के साथ किसी प्रकार की बग है
हमने इसे एक नया कंसोल कमांड लिखकर हल किया है, जो 2 कॉलम (पैरेंट स्कू और चिल्ड्रन स्कस) से संबंधित है। var फ़ोल्डर में csv सेपरेटर के रूप में अल्पविराम फ़ाइल , और बच्चों के रूप में पाइप के साथ बच्चों_स्कस विभाजक
यदि आप कोशिश करना चाहते हैं तो यह फाइलें हैं। आप अपने वांछित विक्रेता के नाम के साथ सिनैप्सिस की जगह लेंगे , और अपने इच्छित मॉड्यूल नाम के साथ सिंक करेंगे
मॉड्यूल को स्थापित करने के बाद, चलाएं bin/magento setup:upgrade
और यदि आप जांच करते हैं तो आप नई कमांड देखेंगे bin/magento list
, जिसे चलाकर निष्पादित किया जा सकता हैbin/magento sync:related
अपडेट करें
। सहेजने से पहले एक अतिरिक्त पंक्ति: 2.2 के बाद से * संस्करण, वहाँ 2 परिवर्तन आवश्यक हैं $product
, यहां मुद्दा यह सूचना को रोकने के लिए https://github.com/magento/magento2/issues/10687
$product->unsetData('media_gallery');
और एडमिन को एडमिन में बदलना
$this->_appState->setAreaCode('adminhtml');
मुझे लगता है कि पहला बदलाव पुराने संस्करणों के लिए सहज नहीं है, दूसरे के लिए समान नहीं है। इसलिए मैंने नीचे दिए गए कोड में केवल पहला जोड़ा है
ऐप / कोड / सिनैप्सिस / सिंक / आदि / di.xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<type name="Magento\Framework\Console\CommandList">
<arguments>
<argument name="commands" xsi:type="array">
<item name="sync_related" xsi:type="object">Sinapsis\Sync\Console\Command\RelatedCommand</item>
</argument>
</arguments>
</type>
ऐप / कोड / सिनैप्सिस / सिंक / आदि / मॉड्यूल। xml
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="module.xsd">
<module name="Sinapsis_Sync" setup_version="1.0.0">
</module>
ऐप / कोड / सिनैप्सिस / सिंक / पंजीकरण। एफपी
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Sinapsis_Sync',
__DIR__
);
ऐप / कोड / सिनैप्सिस / सिंक / कंसोल / कमांड / संबंधितCommand.php
<?php
namespace Sinapsis\Sync\Console\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Magento\Framework\ObjectManagerInterface;
use Magento\Framework\App\State as AppState;
use Magento\Framework\App\Filesystem\DirectoryList;
class RelatedCommand extends Command
{
const CSV_SEPARATOR = ',';
const CHILDREN_SEPARATOR = '|';
protected $_appState;
protected $_objectManager;
protected $_directorylist;
public function __construct(
DirectoryList $_directorylist,
AppState $appState,
ObjectManagerInterface $objectManager
) {
$this->_appState = $appState;
$this->_objectManager = $objectManager;
$this->_directorylist = $_directorylist;
parent::__construct();
}
protected function configure()
{
$this->setName('sync:related')
->setDescription('Synchronize catalog related products');
parent::configure();
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$output->writeln('<info>Starting process...<info>');
$output->writeln('');
$this->_appState->setAreaCode('admin');
$productRepository = $this->_objectManager->create('Magento\Catalog\Model\ProductRepository');
$output->writeln('<info>Loading csv content...<info>');
$output->writeln('');
$filePath = $this->_directorylist->getPath('var') . DIRECTORY_SEPARATOR . 'related.csv';
//@todo control Exception if file does not exist
$parseData = array();
if (($handle = fopen($filePath, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 0, self::CSV_SEPARATOR)) !== FALSE) {
$parseData[] = $data;
}
fclose($handle);
} else {
$output->writeln('<info>Could not read .csv file<info>');
return;
}
$headers = array_shift($parseData); // remove headers
foreach ($parseData as $row){
$skuParent = trim($row[0]);
$skuChildren = trim($row[1]);
$output->writeln('<info>Loading parent product ' . $skuParent . ' ... <info>');
try {
$product = $productRepository->get($skuParent);
} catch (\Magento\Framework\Exception\NoSuchEntityException $e){
$output->writeln('<info>Could not load!<info>');
continue;
}
$links = $product->getProductLinks();
$children = explode(self::CHILDREN_SEPARATOR, $skuChildren);
$i = 1;
foreach ($children as $skuChild){
$output->writeln('<info>Loading related product ' . $skuChild . ' ... <info>');
try {
$child = $productRepository->get($skuChild);
} catch (\Magento\Framework\Exception\NoSuchEntityException $e){
$output->writeln('<info>Could not load!<info>');
continue;
}
$productLink = $this->_objectManager->create('Magento\Catalog\Api\Data\ProductLinkInterface')
->setSku($skuParent)
->setLinkedProductSku($skuChild)
->setPosition($i)
->setLinkType('related');
$links[] = $productLink;
$i++;
}
$product->setProductLinks($links);
$product->unsetData('media_gallery');
$productRepository->save($product);
$output->writeln('<info>Relations saved for ' . $skuParent . '<info>');
}
$output->writeln('');
$output->writeln('<info>Done<info>');
}
}