色色找magento bug: $identifierType 不管用 的

创建/更新 ... 删除产品时,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,随便了 不过想不到 国外的 猿 也不是很细心啊 ...........

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值