apimagentoconfigurable

How to get the options of a configurable attribute in Magento?


we want to export/import configurable products through the Magento-API in another system. What is important for us, are the values of the configurable products like a T-Shirt which has 3 colors (red, green and blue).

We receive the configurable attributes with the following function:

public function options($productId, $store = null, $identifierType = null)
{
    $product = $this->_getProduct($productId, $store, $identifierType);

    if (!$product->getId()) {
        $this->_fault('not_exists');
    }

    $configurableAttributeCollection = $product->getTypeInstance()->getConfigurableAttributes();

    $result = array();
    foreach($configurableAttributeCollection as $attribute){
        $result[$attribute->getProductAttribute()->getAttributeCode()] = $attribute->getProductAttribute()->getFrontend()->getLabel();
        //Attr-Code:    $attribute->getProductAttribute()->getAttributeCode()
        //Attr-Label:   $attribute->getProductAttribute()->getFrontend()->getLabel()
        //Attr-Id:      $attribute->getProductAttribute()->getId()
    }


    return $result;
}

But how is it possible to get the options used in that product (e.a. blue, green, red if the configurable attribute is "color") with the now available label/id from the configurable attribute which we got through the above function?

Answers are very appreciated!

Tim


Solution

  • Since we couldn't find a better solution, this is what I came up with:

    public function options($productId, $store = null, $identifierType = null)
    {
        $_product = $this->_getProduct($productId, $store, $identifierType);
    
        if (!$_product->getId()) {
            $this->_fault('not_exists');
        }
    
        //Load all simple products
        $products = array();
        $allProducts = $_product->getTypeInstance(true)->getUsedProducts(null, $_product);
        foreach ($allProducts as $product) {
            if ($product->isSaleable()) {
                $products[] = $product;
            } else {
                $products[] = $product;
            }
        }
    
        //Load all used configurable attributes
        $configurableAttributeCollection = $_product->getTypeInstance()->getConfigurableAttributes();
    
        $result = array();
        //Get combinations
        foreach ($products as $product) {
            $items = array();
            foreach($configurableAttributeCollection as $attribute) {
                $attrValue = $product->getResource()->getAttribute($attribute->getProductAttribute()->getAttributeCode())->getFrontend();
                $attrCode = $attribute->getProductAttribute()->getAttributeCode();
                $value = $attrValue->getValue($product);
                $items[$attrCode] = $value[0];
            }
            $result[] = $items;
        }
    
        return $result;
    }
    

    Hope this helps anybody.