Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
configurable_products.php
Go to the documentation of this file.
1 <?php
16 
17 require __DIR__ . '/configurable_attribute.php';
18 
20 $productRepository = Bootstrap::getObjectManager()
21  ->get(ProductRepositoryInterface::class);
22 
24 $installer = Bootstrap::getObjectManager()->create(CategorySetup::class);
25 
26 /* Create simple products per each option value*/
28 $options = $attribute->getOptions();
29 
31 $attributeSetId = $installer->getAttributeSetId('catalog_product', 'Default');
33 $productIds = [10, 20];
34 array_shift($options); //remove the first option which is empty
35 
36 foreach ($options as $option) {
38  $product = Bootstrap::getObjectManager()->create(Product::class);
39  $productId = array_shift($productIds);
40  $product->setTypeId(Type::TYPE_SIMPLE)
41  ->setId($productId)
42  ->setAttributeSetId($attributeSetId)
43  ->setWebsiteIds([1])
44  ->setName('Configurable Option' . $option->getLabel())
45  ->setSku('simple_' . $productId)
46  ->setPrice($productId)
47  ->setTestConfigurable($option->getValue())
48  ->setVisibility(Visibility::VISIBILITY_NOT_VISIBLE)
49  ->setStatus(Status::STATUS_ENABLED)
50  ->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1]);
52 
53  $attributeValues[] = [
54  'label' => 'test',
55  'attribute_id' => $attribute->getId(),
56  'value_index' => $option->getValue(),
57  ];
58  $associatedProductIds[] = $product->getId();
59 }
60 
62 $product = Bootstrap::getObjectManager()->create(Product::class);
64 $optionsFactory = Bootstrap::getObjectManager()->create(Factory::class);
66  [
67  'attribute_id' => $attribute->getId(),
68  'code' => $attribute->getAttributeCode(),
69  'label' => $attribute->getStoreLabel(),
70  'position' => '0',
71  'values' => $attributeValues,
72  ],
73 ];
75 $extensionConfigurableAttributes = $product->getExtensionAttributes();
76 $extensionConfigurableAttributes->setConfigurableProductOptions($configurableOptions);
77 $extensionConfigurableAttributes->setConfigurableProductLinks($associatedProductIds);
78 $product->setExtensionAttributes($extensionConfigurableAttributes);
79 
80 $product->setTypeId(Configurable::TYPE_CODE)
81  ->setId(1)
82  ->setAttributeSetId($attributeSetId)
83  ->setWebsiteIds([1])
84  ->setName('Configurable Product')
85  ->setSku('configurable')
86  ->setVisibility(Visibility::VISIBILITY_BOTH)
87  ->setStatus(Status::STATUS_ENABLED)
88  ->setStockData(['use_config_manage_stock' => 1, 'is_in_stock' => 1]);
89 $productRepository->cleanCache();
91 
92 /* Create simple products per each option value*/
94 $options = $attribute->getOptions();
95 
96 $attributeValues = [];
97 $attributeSetId = $installer->getAttributeSetId('catalog_product', 'Default');
99 $productIds = [30, 40];
100 array_shift($options); //remove the first option which is empty
101 
102 foreach ($options as $option) {
104  $product = Bootstrap::getObjectManager()->create(Product::class);
105  $productId = array_shift($productIds);
106  $product->setTypeId(Type::TYPE_SIMPLE)
107  ->setId($productId)
108  ->setAttributeSetId($attributeSetId)
109  ->setWebsiteIds([1])
110  ->setName('Configurable Option' . $option->getLabel())
111  ->setSku('simple_' . $productId)
112  ->setPrice($productId)
113  ->setTestConfigurable($option->getValue())
114  ->setVisibility(Visibility::VISIBILITY_NOT_VISIBLE)
115  ->setStatus(Status::STATUS_ENABLED)
116  ->setStockData(['use_config_manage_stock' => 1, 'qty' => 100, 'is_qty_decimal' => 0, 'is_in_stock' => 1]);
118 
119  $attributeValues[] = [
120  'label' => 'test',
121  'attribute_id' => $attribute->getId(),
122  'value_index' => $option->getValue(),
123  ];
124  $associatedProductIds[] = $product->getId();
125 }
126 
128 $product = Bootstrap::getObjectManager()->create(Product::class);
129 
131 $optionsFactory = Bootstrap::getObjectManager()->create(Factory::class);
132 
134  [
135  'attribute_id' => $attribute->getId(),
136  'code' => $attribute->getAttributeCode(),
137  'label' => $attribute->getStoreLabel(),
138  'position' => '0',
139  'values' => $attributeValues,
140  ],
141 ];
142 
144 
145 $extensionConfigurableAttributes = $product->getExtensionAttributes();
146 $extensionConfigurableAttributes->setConfigurableProductOptions($configurableOptions);
147 $extensionConfigurableAttributes->setConfigurableProductLinks($associatedProductIds);
148 
149 $product->setExtensionAttributes($extensionConfigurableAttributes);
150 
151 $product->setTypeId(Configurable::TYPE_CODE)
152  ->setId(11)
153  ->setAttributeSetId($attributeSetId)
154  ->setWebsiteIds([1])
155  ->setName('Configurable Product 12345')
156  ->setSku('configurable_12345')
157  ->setVisibility(Visibility::VISIBILITY_BOTH)
158  ->setStatus(Status::STATUS_ENABLED)
159  ->setStockData(['use_config_manage_stock' => 1, 'is_in_stock' => 1]);
160 $productRepository->cleanCache();
$associatedProductIds
defined('TESTS_BP')||define('TESTS_BP' __DIR__
Definition: _bootstrap.php:60
$extensionConfigurableAttributes
$configurableAttributesData
$configurableOptions