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