সিএসভি আমদানি: আমি কীভাবে ম্যাজেন্টো 2 এ সম্পর্কিত পণ্য আমদানি করতে পারি?


9

আমি কীভাবে ম্যাজেন্টো 2 তে সিএসভির মাধ্যমে সম্পর্কিত পণ্যগুলি আমদানি করতে পারি?

আমার সিএসভি ফাইলে আমার কাছে পণ্যের সাথে সম্পর্কিত "11-111,22-222" উদাহরণযুক্ত ডেটা "11-111,22-222" বিশিষ্ট সম্পর্কিত_স্কাস বিশিষ্ট একটি সারি রয়েছে । তবে অ্যাডমিন প্রোডাক্ট-> ক্যাটালগে এই আমদানিকৃত প্রোডাক্টটিতে সাইডবার ট্যাব সম্পর্কিত পণ্যগুলি কোনও পণ্য দেখায় না যদিও স্কাসযুক্ত সেই পণ্যগুলি ক্যাটালগে বিদ্যমান।

ভুল কোথায় হতে পারে?


ম্যাজেন্টো কোন ত্রুটি দেখিয়েছে? আপনার আমদানি আচরণটি কী: যোগ / আপডেট, প্রতিস্থাপন বা মুছুন?
খোয়া ট্রুংডিনহ

কোনও ত্রুটি নেই, আমদানি সফলভাবে শেষ হয়েছে। আমদানি আচরণটি ছিল "অ্যাড / আপডেট"।
অতিথি

আপনি কি আপনার ডাটাবেসটিকে আবার সূচিকরণের চেষ্টা করছেন?
খোয়া ট্রুংদিনহ

হ্যাঁ, আমি পিএইচপি বিন / ম্যাজেন্টো সূচক: কমান্ডটি রিইনডেক্স এবং ক্যাশে ফ্লাশ করেছি। আমি পাইপ ব্যবহার করেছি "|" একাধিক মান বিভাজক হিসাবে এবং উদাহরণ ডেটা ছিল "11-111 | 22-222"। সম্ভবত ম্যাজেন্টো সম্পর্কিত_স্কাস বৈশিষ্ট্যের জন্য অন্য একাধিক মান বিভাজককে সমর্থন করে না ?
অতিথি

আপনি কি এখন আপনার পণ্য আমদানি করতে অর্জন করেছেন?
নোলওয়েনিগ

উত্তর:


5

আমরা একই সমস্যাটি অনুভব করেছি, দেখে মনে হচ্ছে সম্পর্কিত পণ্যগুলির সাথে আমদানি মডিউলে কোনও ধরণের বাগ রয়েছে

আমরা একটি নতুন কনসোল কমান্ড যা 2 টি কলাম নেই (পিতা বা মাতা SKU & শিশুদের skus) আশা লিখে এটা মীমাংসিত করেছি related.csv ফাইল Var children_skus বিভাজক হিসেবে CSV বিভাজক হিসেবে কমা, এবং নল দিয়ে, ফোল্ডার

আপনি যদি চেষ্টা করতে চান তবে এই ফাইলগুলি। আপনি সিনাপসিসকে আপনার পছন্দসই বিক্রেতার নাম এবং আপনার পছন্দসই মডিউল নামের সাথে সিঙ্ক করুন

মডিউলটি ইনস্টল করার পরে, চালনা করুন bin/magento setup:upgradeএবং আপনি যদি পরীক্ষা করেন তবে নতুন কমান্ডটি দেখতে পাবেন bin/magento listযা চালিয়ে চালিত হতে পারেbin/magento sync:related

হালনাগাদ

২.২। * সংস্করণ থেকে, এখানে দুটি পরিবর্তনের প্রয়োজন রয়েছে: $productসমস্যাটি প্রতিরোধের জন্য সংরক্ষণের আগে একটি অতিরিক্ত লাইন এখানে রিপোর্ট করা হয়েছে https://github.com/magento/magento2/issues/10687

$product->unsetData('media_gallery');

আর পরিবর্তন অ্যাডমিন থেকে adminhtml মধ্যে

$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 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__
);

অ্যাপ্লিকেশন / কোড / সিনাপসিস / সিঙ্ক / কনসোল / কমান্ড / সম্পর্কিতকম্যান্ড.এফপি

<?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>');
    }
}

নতুন কোড তৈরি করার সময় এই কোডটি কাজ করবে তবে আমি এখানে আপনার কোডটি যাচাই করেছি আপনি বিদ্যমান প্যারেন্ট স্কুকে সম্পর্কিত পণ্য যুক্ত করছেন।
হিতেশ বালপান্দে

প্যারেন্ট স্কু তৈরি করার সময় আপনার যদি কোনও ধারণা থাকে তবে আমরা সেই পণ্যটিতে কিছু সম্পর্কিত / আপসেল / ক্রসেল স্কাস যুক্ত করতে পারি। অগ্রিম ধন্যবাদ আমাকে পরামর্শ করুন।
हितেশ বালপান্দে

এই কোডটি আমার জন্য ধন্যবাদ রৌল সানচেজ
হিতেশ বালপান্দে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.