/**
  * 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 [];
     }
 }
Esempio n. 2
0
 /**
  * @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;
 }
Esempio n. 4
0
 /**
  * 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;
 }