প্রোগ্রামগতভাবে একটি কনফিগারযোগ্য পণ্য তৈরি করুন এবং Magento2 প্রোডাক্টে কনফিগারযোগ্য পণ্যটিতে সাধারণ পণ্যটি বরাদ্দ করুন


10

এটি আমি এ পর্যন্ত করেছি। সহজ এবং কনফিগারযোগ্য পণ্য তৈরি করা হয়। সমস্যাটি হ'ল আমি কনফিগারযোগ্য পণ্যটিতে সাধারণ পণ্য বরাদ্দ করতে পারি না। এখানে কোড (আইডিএস এবং বৈশিষ্ট্যগুলি ডিফল্ট নমুনা ডেটার সাথে কাজ করে)।

    //simple product
    $simple_product = $this->_objectManager->create('\Magento\Catalog\Model\Product');
    $simple_product->setSku('test-simple');
    $simple_product->setName('test name simple');
    $simple_product->setAttributeSetId(4);
    $simple_product->setSize_general(193); // value id of S size
    $simple_product->setStatus(1);
    $simple_product->setTypeId('simple');
    $simple_product->setPrice(10);
    $simple_product->setWebsiteIds(array(1));
    $simple_product->setCategoryIds(array(31));
    $simple_product->setStockData(array(
        'use_config_manage_stock' => 0, //'Use config settings' checkbox
        'manage_stock' => 1, //manage stock
        'min_sale_qty' => 1, //Minimum Qty Allowed in Shopping Cart
        'max_sale_qty' => 2, //Maximum Qty Allowed in Shopping Cart
        'is_in_stock' => 1, //Stock Availability
        'qty' => 100 //qty
        )
    );

    $simple_product->save();

    $simple_product_id = $simple_product->getId();
    echo "simple product id: ".$simple_product_id."\n";


    //configurable product
    $configurable_product = $this->_objectManager->create('\Magento\Catalog\Model\Product');
    $configurable_product->setSku('test-configurable');
    $configurable_product->setName('test name configurable');
    $configurable_product->setAttributeSetId(4);
    $configurable_product->setStatus(1);
    $configurable_product->setTypeId('configurable');
    $configurable_product->setPrice(11);
    $configurable_product->setWebsiteIds(array(1));
    $configurable_product->setCategoryIds(array(31));
    $configurable_product->setStockData(array(
        'use_config_manage_stock' => 0, //'Use config settings' checkbox
        'manage_stock' => 1, //manage stock
        'is_in_stock' => 1, //Stock Availability
        )
    );

    $configurable_product->getTypeInstance()->setUsedProductAttributeIds(array(152),$configurable_product); //attribute ID of attribute 'size_general' in my store
    $configurableAttributesData = $configurable_product->getTypeInstance()->getConfigurableAttributesAsArray($configurable_product);

    $configurable_product->setCanSaveConfigurableAttributes(true);
    $configurable_product->setConfigurableAttributesData($configurableAttributesData);

    $configurableProductsData = array();
    $configurableProductsData[$simple_product_id] = array( //[$simple_product_id] = id of a simple product associated with this configurable
        '0' => array(
            'label' => 'S', //attribute label
            'attribute_id' => '152', //attribute ID of attribute 'size_general' in my store
            'value_index' => '193', //value of 'S' index of the attribute 'size_general'
            'is_percent'    => 0,
            'pricing_value' => '10',
        )
    );
    $configurable_product->setConfigurableProductsData($configurableProductsData);

    $configurable_product->save();

    echo "configurable product id: ".$configurable_product->getId()."\n";

আপনি কি এর চূড়ান্ত সমাধান পেয়েছেন?
প্রফুল রাজপুত

$ বৈশিষ্ট্যসেটআইডিটি কী হওয়া উচিত?
আবদো টাস্কস

উত্তর:


7

আপনি কনফিগারযোগ্য পণ্য তৈরির জন্য API কার্যকরী পরীক্ষার উপর পর্যালোচনা করতে পারেন

কোডটি দেখতে হবে:

$product = $productFactory->create(['name'=> 'configurable product', ... ]);
$configurableOption = $optionFactory->create([]);
$linkedProduct = $linkFactory->create([]);
$product->getExtensionAttributes()->setConfigurableProductOptions($configurableOption);
$product->getExtensionAttributes()->setConfigurableProductLinks($linkedProduct);
$productRepository->save($product)

দয়া করে নোট করুন যে API বর্তমানে উত্পন্ন করে না সহজ পণ্য , তাদের আগাম তৈরি করা দরকার।


2
ভবিষ্যতের দর্শকদের জন্য: এটি করার সঠিক উপায় এটি (এবং উদাহরণটি পৃথক উত্তর)। তবে শেষ লাইনে নোট করা খুব জরুরি। আপনাকে পণ্য সংগ্রহস্থলের মাধ্যমে সঞ্চয় করতে হবে$product->save()সরাসরি কল করা কনফিগারযোগ্য ডেটা সংরক্ষণের জন্য ট্রিগার করবে না (যেমন পাওয়া গেছে \Magento\ConfigurableProduct\Model\Plugin\AroundProductRepositorySave)।
রায়ান হোয়ের

5

আমি উদাহরণ স্ক্রিপ্ট তৈরি। অবজেক্টম্যানেজারের সমস্ত সরাসরি ব্যবহারের ডিআই-তে প্রতিস্থাপন করা উচিত

    $ob = ObjectManager::getInstance();

    /** @var \Magento\Catalog\Api\ProductAttributeRepositoryInterface $attributeRepo */
    $attributeRepo =  $ob->get(\Magento\Catalog\Api\ProductAttributeRepositoryInterface::class);

    $attribute = $attributeRepo->get('color');  // color should be in default attribute set

    /** @var \Magento\Catalog\Api\ProductRepositoryInterface $pr */
    $pr = $ob->get(ProductRepositoryInterface::class);
    $ids = [];
    $values = [];
    foreach($attribute->getOptions() as $option) {
        $id = $option->getValue();
        /** @var \Magento\Catalog\Api\Data\ProductInterface $p */
        $p = $ob->get(\Magento\Catalog\Api\Data\ProductInterface::class);
        $p->setSku('simple-'. $id);
        $p->setName('Configurable Product option #'. $option->getLabel());
        $p->setPrice(10 + $id);
        $p->setTypeId('simple');
        $p->setCustomAttribute($attribute->getAttributeCode(), $id);
        $p = $pr->save($p);
        $ids[] = $p->getId();
        /** @var \Magento\ConfigurableProduct\Api\Data\OptionValueInterface $opVal */
        $opVal =  $ob->create(\Magento\ConfigurableProduct\Api\Data\OptionValueInterface::class);
        $opVal->setValueIndex($id);
        $values[] = $opVal;
    }
    /** @var \Magento\Catalog\Api\Data\ProductInterface $cp */
    $cp = $ob->get(\Magento\Catalog\Api\Data\ProductInterface::class);
    $cp->setSku('configurable');
    $cp->setName('Configurable product');


    /** @var \Magento\ConfigurableProduct\Api\Data\OptionInterface $option */
    $option = $ob->create(\Magento\ConfigurableProduct\Api\Data\OptionInterface::class);
    $option->setLabel('Product Color');
    $option->setAttributeId($attribute->getAttributeId());
    $option->setValues($values);

    $exteAttrs = $cp->getExtensionAttributes();
    $exteAttrs->setConfigurableProductLinks($ids);
    $exteAttrs->setConfigurableProductOptions([
        $option
    ]);

    $pr->save($cp);

দেখতে https://github.com/magento/magento2/blob/2.1/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/product_configurable.php অন্যান্য উদাহরণ হিসাবে


হাই অ্যান্ডি, আপনার সমাধানের জন্য ধন্যবাদ। তবে what সিপি-> পান এক্সটেনশনঅ্যাট্রিবিউটস () নিখুঁত হয়, আমি যাই করি না কেন পরিবর্তন হয়। উদাহরণস্বরূপ: "পিএইচপি মারাত্মক ত্রুটি: নালার উপর একটি সদস্য ফাংশন সেট কনফিগারযোগ্য প্রডাক্টঅপশন () নম্বরে কল করুন"
মিমিগিগি

$ productExistance = $ product-> getExistanceAttributes () এর মতো কোড ব্যবহার করুন; যদি ($ productExistance === নাল) {$ productExistance = $ this-> productExistanceFactory-> create (); }
কান্দি

@ ক্যান্ডি, দয়া করে আপনার উত্তরটি পর্যালোচনা করুন, এটি অসম্পূর্ণতার কারণে কাজ করে না। আপনাকে ঠিক করতে হবে $option->setValues($values), তবে বিশেষত আপনি ভুলে গেছেন $cp->setExtensionAttributes($exteAttrs)
লুস্ক্কু

তুমি ঠিক. পরীক্ষার কোডটি
কান্দি

সাধারণ পণ্য তৈরি করতে ইচ্ছুক লোকেরা কেবল একটি ইঙ্গিত ... কনফিগারযোগ্য পণ্যগুলি হ'ল সাধারণ পণ্যগুলির সমষ্টি, তাই সাধারণ পণ্য তৈরির কোডটি এখানেও রয়েছে!
কুইকশিফ্টিন

1

নীচের কোডটি আমার পক্ষে কাজ করে।

/* Associate simple product to configurable */
$associatedProductIds = array($simplProductId1,$simplProductId2,$simplProductId3,$simplProductId4);//Simple Product ids array
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($configProductId); // Load Configurable Product
$attributeModel = $objectManager->create('Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute');
$position = 0;
$attributes = array($attributeColorId, $attributeSizeId); // Super Attribute Ids Used To Create Configurable Product(list of supper attribute ids what ever belong to that the attribute set under which the configurable product is)
foreach ($attributes as $attributeId) {
    $data = array('attribute_id' => $attributeId, 'product_id' => $configProductId, 'position' => $position);
    $position++;
    $attributeModel->setData($data);//->save();
}
$product->setTypeId("configurable");
$product->setAffectConfigurableProductAttributes($attributeSetId);
$objectManager->create('Magento\ConfigurableProduct\Model\Product\Type\Configurable')->setUsedProductAttributeIds($attributes, $product);
$product->setNewVariationsAttributeSetId($attributeSetId);
$product->setAssociatedProductIds($associatedProductIds);// Setting Associated Products
$product->setCanSaveConfigurableAttributes(true);
$product->save();

এটি কাজ করে না। আমাকে ত্রুটি প্রদান করে সেই বিকল্পটি সংজ্ঞায়িত করা হয়নি
আসিশ হীরা

আমাকে একই ত্রুটি প্রদান করে যে বিকল্পটি সংজ্ঞায়িত করা হয়নি - @ আশিস আপনি কি এই সমস্যার সমাধান করেছেন
নিধি

@ আশিষ ও নিধি: হ্যাঁ এটি আমার পক্ষে ও সিএইচডি ইউ এইভির পক্ষে বিকল্পগুলি ঘোষণা করার পক্ষে ভাল কাজ করেছে
ইপসিতা রাউট

@ নিধি না আমি এটি সমাধান করতে পারছি না।
আশীষ হিরা

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