/** * Get linked to configurable simple products * * @param ProductInterface $product * @return int[] */ private function getLinkedProducts(ProductInterface $product) { /** @var Configurable $typeInstance */ $typeInstance = $product->getTypeInstance(); $childrenIds = $typeInstance->getChildrenIds($product->getId()); if (isset($childrenIds[0])) { return $childrenIds[0]; } else { return []; } }
/** * @param ProductInterface $product * @return OptionInterface[] */ public function load(ProductInterface $product) { $options = []; /** @var Configurable $typeInstance */ $typeInstance = $product->getTypeInstance(); $attributeCollection = $typeInstance->getConfigurableAttributeCollection($product); $this->extensionAttributesJoinProcessor->process($attributeCollection); foreach ($attributeCollection as $attribute) { $values = []; $attributeOptions = $attribute->getOptions(); if (is_array($attributeOptions)) { foreach ($attributeOptions as $option) { /** @var \Magento\ConfigurableProduct\Api\Data\OptionValueInterface $value */ $value = $this->optionValueFactory->create(); $value->setValueIndex($option['value_index']); $values[] = $value; } } $attribute->setValues($values); $options[] = $attribute; } return $options; }
/** * @param \Magento\Catalog\Api\Data\ProductInterface $product * @return \Magento\Bundle\Api\Data\OptionTypeInterface[] */ private function getOptions(\Magento\Catalog\Api\Data\ProductInterface $product) { /** @var \Magento\Bundle\Model\Product\Type $productTypeInstance */ $productTypeInstance = $product->getTypeInstance(); $productTypeInstance->setStoreFilter($product->getStoreId(), $product); $optionCollection = $productTypeInstance->getOptionsCollection($product); $selectionCollection = $productTypeInstance->getSelectionsCollection($productTypeInstance->getOptionsIds($product), $product); $options = $optionCollection->appendSelections($selectionCollection); return $options; }
/** * Retrieve collection of Eav Attributes from Configurable product * * @param Product $product * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute[] */ public function getAttributesFromConfigurable(Product $product) { $result = []; $typeInstance = $product->getTypeInstance(); if ($typeInstance instanceof Configurable) { $configurableAttributes = $typeInstance->getConfigurableAttributes($product); /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute $configurableAttribute */ foreach ($configurableAttributes as $configurableAttribute) { /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */ $attribute = $configurableAttribute->getProductAttribute(); $result[] = $attribute; } } return $result; }
/** * @param \Magento\Catalog\Api\Data\ProductInterface $product * @param int[] $linkIds * @return $this */ protected function saveConfigurableProductLinks(\Magento\Catalog\Api\Data\ProductInterface $product, array $linkIds) { $configurableProductTypeResource = $this->typeConfigurableFactory->create(); if (!empty($linkIds)) { /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurableProductType */ $configurableProductType = $product->getTypeInstance(); $configurableAttributes = $configurableProductType->getConfigurableAttributes($product); $attributeCodes = []; foreach ($configurableAttributes as $configurableAttribute) { /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $productAttribute */ $productAttribute = $configurableAttribute->getProductAttribute(); $attributeCode = $productAttribute->getAttributeCode(); $attributeCodes[] = $attributeCode; } $this->validateProductLinks($attributeCodes, $linkIds); } $configurableProductTypeResource->saveProducts($product, $linkIds); return $this; }