我们希望通过另一个系统中的Magento-API导出/导入可配置产品。对我们来说重要的是可配置产品的价值,如T恤,有3种颜色(红色,绿色和蓝色)。
我们使用以下函数接收可配置属性:
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;
}
但是如何使用我们通过上述函数获得的可配置属性中的现有标签/ id来获取该产品中使用的选项(如果可配置属性为“颜色”,则为蓝色,绿色,红色) ?
非常感谢答案!
添
答案 0 :(得分:7)
由于我们找不到更好的解决方案,所以我想出了这个:
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;
}
希望这有助于任何人。
答案 1 :(得分:1)
我并非100%确定我理解这个问题...假设您需要特定产品的可配置选项的值和标签,我认为这样可行(在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;
}
再次不确定您要查找的是什么,但$attribute->getProductAttribute()->getSource()->getAllOptions()
函数为我提供了可用的选项标签和值。
希望这会有所帮助。如果没有,请让我误解。谢谢!