创建/更新 ... 删除产品时,api接口文档中 提供了
$identifierType
用于指定是使用 产品id或者sku进行 过滤:
可选值: "id" "sku"
但是具体测试中不管咋样都没用,看了下代码
app/code/core/Mage/Catalog/Model/Product/Api.php
中调用 getProduct() 位于 app/code/core/Mage/Catalog/Helper/Product.php 中
/** * Return loaded product instance * * @param int|string $productId (SKU or ID) * @param int $store * @param string $identifierType * @return Mage_Catalog_Model_Product */ public function getProduct($productId, $store, $identifierType = null) { $loadByIdOnFalse = false; if ($identifierType == null) { if (is_string($productId) && !preg_match("/^[+-]?[1-9][0-9]*$|^0$/", $productId)) { $identifierType = 'sku'; $loadByIdOnFalse = true; } else { $identifierType = 'id'; } } /** @var $product Mage_Catalog_Model_Product */ $product = Mage::getModel('catalog/product'); if ($store !== null) { $product->setStoreId($store); } if ($identifierType == 'sku') { $idBySku = $product->getIdBySku($productId); if ($idBySku) { $productId = $idBySku; } if ($loadByIdOnFalse) { $identifierType = 'id'; } } if ($identifierType == 'id' && is_numeric($productId)) { $productId = !is_float($productId) ? (int) $productId : 0; $product->load($productId); } return $product; }
发现了 坑爹的代码啊,如果 不指定 identifierType 参数,则 仅仅是 字符串时才使用 sku作为条件
但是 当指定了 identifierType 为'sku'时咋都不执行 ,具体见
if ($loadByIdOnFalse) { $identifierType = 'id'; }
这坑爹的代码 $loadByIdOnFalse 恒为 false,能执行才怪呢
所以 按如下进行修改:
if ($identifierType == 'sku') { $loadByIdOnFalse = true; $idBySku = $product->getIdBySku($productId); if ($idBySku) { $productId = $idBySku; } if ($loadByIdOnFalse) { $identifierType = 'id'; } }
此时就OK了 或者你想自己覆盖它的api,随便了 不过想不到 国外的 猿 也不是很细心啊 ...........