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开发者_JAVA百科 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
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.
I'm not 100% sure that I understand the question ... assuming you want the values and labels for the configurable options for a specific product I assume this would work (tested on version 1.4.0.1)
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()] = array(
$attribute->getProductAttribute()->getFrontend()->getLabel() => $attribute->getProductAttribute()->getSource()->getAllOptions()
);
//Attr-Code: $attribute->getProductAttribute()->getAttributeCode()
//Attr-Label: $attribute->getProductAttribute()->getFrontend()->getLabel()
//Attr-Id: $attribute->getProductAttribute()->getId()
}
return $result;
}
again not sure exactly what your looking for, but the $attribute->getProductAttribute()->getSource()->getAllOptions()
function gave me the available options label and value.
Hope this helps. if not, let me where I misunderstood. Thanks!
精彩评论