我正在尝试使用 Magento SOAP API v2 获取可配置产品的所有相关产品。catalogProductLink 调用看起来很接近,但不处理可配置类型。我没有看到任何其他包含相关产品和产品可配置类型信息的调用。其他人是如何解决这个问题的?
我正在使用 Magento 1.6 版和带有 Java 的 SOAP API V2。
我深入研究了这个解决方案,并意识到您可能需要覆盖 API 模型 (Mage_Catalog_Model_Product_Api) 才能获得您正在寻找的结果。
在 items 函数中(大约第 90 行),您可以执行以下操作:
foreach ($collection as $product) {
$childProductIds = Mage::getModel('catalog/product_type_configurable')->getChildrenIds($product->getId());
$result[] = array(
'product_id' => $product->getId(),
'sku' => $product->getSku(),
'name' => $product->getName(),
'set' => $product->getAttributeSetId(),
'type' => $product->getTypeId(),
'category_ids' => $product->getCategoryIds(),
'website_ids' => $product->getWebsiteIds(),
'children' => $childProductIds[0],
);
}
将 items() 函数的内容替换为以下内容
if($type == "associated"){
$product = $this->_initProduct($productId);
try
{
$result = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$product);
}
catch (Exception $e)
{
$this->_fault('data_invalid', Mage::helper('catalog')->__('The product is not configurable.'));
}
}
else
{
$typeId = $this->_getTypeId($type);
$product = $this->_initProduct($productId, $identifierType);
$link = $product->getLinkInstance()
->setLinkTypeId($typeId);
$collection = $this->_initCollection($link, $product);
$result = array();
foreach ($collection as $linkedProduct) {
$row = array(
'product_id' => $linkedProduct->getId(),
'type' => $linkedProduct->getTypeId(),
'set' => $linkedProduct->getAttributeSetId(),
'sku' => $linkedProduct->getSku()
);
foreach ($link->getAttributes() as $attribute) {
$row[$attribute['code']] = $linkedProduct->getData($attribute['code']);
}
$result[] = $row;
}
}
return $result;
那么您现在可以像这样调用 API:
$client->call($sessionId, 'product_link.list', array('associated', $id_of_your_configurable_product));
基本上我的代码正在检查提供的类型,如果它是“关联的”,它会返回子产品。我很确定有更好的方法,但我认为 Product Link API 是最相关的地方。
享受!
(请注意:这段代码不是我的,我只是对其进行了改编,并认为这将是一个帮助你们的好主意)