प्रोग्रामेटिक रूप से एक कॉन्फ़िगर करने योग्य उत्पाद बनाते हैं और 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";

क्या आपको इसके लिए अंतिम समाधान मिला है?
प्रफुल्ल राजपूत

$ क्या होना चाहिए FeatureSetId?
एबडो टास्क

जवाबों:


7

आप विन्यास योग्य उत्पाद बनाने के लिए एपीआई कार्यात्मक परीक्षण पर समीक्षा कर सकते हैं

कोड जैसा दिखना चाहिए:

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

कृपया ध्यान दें कि वर्तमान में एपीआई सरल उत्पाद नहीं बनाता है, उन्हें पहले से बनाने की आवश्यकता है।


2
भविष्य के दर्शकों के लिए: यह (और उदाहरण, अलग जवाब) यह करने का सही तरीका है। लेकिन अंतिम पंक्ति को नोट करना बहुत महत्वपूर्ण है। आपको उत्पाद रिपॉजिटरी के माध्यम से बचाना होगा$product->save()सीधे कॉल करने से बचाने के लिए कॉन्फ़िगर करने योग्य डेटा को ट्रिगर नहीं किया जाएगा (जैसा कि पाया गया है \Magento\ConfigurableProduct\Model\Plugin\AroundProductRepositorySave)।
रियान होउर

5

मैंने उदाहरण स्क्रिप्ट बनाई। ObjectManager के सभी प्रत्यक्ष उपयोगों को DI पर प्रतिस्थापित किया जाना चाहिए

    $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 अन्य उदाहरण के रूप में


हाय एंडी, आपके समाधान के लिए धन्यवाद। लेकिन $ cp-> getExtensionAttributes () null everytime, कोई फर्क नहीं पड़ता कि मैं क्या करूं और बदलूं। उदाहरण के लिए: "PHP घातक त्रुटि: एक सदस्य समारोह के लिए कॉल करें सेट करेंअनुकूलनीय उत्पाद () शून्य पर"
mmmgigi

$ productExtension जैसे कोड का उपयोग करें = $ product-> getExtensionAttributes (); if ($ productExtension === null) {$ productExtension = $ this-> productExtensionFactory-> create (); }
कांडी

@ कैंडी, कृपया अपने उत्तर की समीक्षा करें, यह अपूर्णता के कारण काम नहीं करता है। आपको ठीक करना होगा $option->setValues($values), लेकिन विशेष रूप से आप भूल गए $cp->setExtensionAttributes($exteAttrs)
लुकस्क्यू

आप सही। शायद टेस्ट github.com/magento/magento2/blob/2.1/dev/tests/integration/…
KAndy

साधारण उत्पादों को बनाने के इच्छुक लोगों के लिए बस एक संकेत ... कॉन्फ़िगर करने योग्य उत्पाद सरल उत्पादों के एकत्रीकरण हैं, इसलिए सरल उत्पाद निर्माण कोड यहां भी है!
क्विकशिफ्टिन

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();

यह काम नहीं करता है। मुझे वह त्रुटि देते हुए विकल्प को परिभाषित नहीं किया गया
आशीष हीरा

मुझे वही त्रुटि देते हुए उस विकल्प को परिभाषित नहीं किया गया है - @ आशीष क्या आपने इस समस्या को हल किया है
निधि

@ आशीष और निधि: हाँ, यह मेरे लिए ठीक काम किया है और विकल्प की घोषणा करने के लिए
यूएचवी

@ निधी नहीं मैं इसे हल करने में सक्षम नहीं हूं।
आशीष हीरा

@IpsitaRout आप उस कोड को जोड़ सकते हैं जिसके द्वारा हम विकल्पों की घोषणा कर सकते हैं?
आशीष हीरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.