如果我设置重复的SKU, Magento不会显示错误


Magento is not showing error if I set duplicate SKU

我有一个需求,我必须从Magento代码(一个CodeIgniter项目)之外更新Magento产品。

一切都工作完美,但是,有一件事是错误的,如果我保存2个产品具有相同的SKU,我的代码不会抛出异常。

而如果我去我的Magento网站的管理部分,并试图为任何产品设置一个重复的SKU,它确实显示错误,SKU不能复制。

但是为什么下面的代码允许我设置重复的SKU?我在这里只发布相关代码。

   try {
        $url = preg_replace('#[^0-9a-z]+#i', '-', $product_name);
        $url = strtolower($url);
        $simpleProduct
                ->setWebsiteIds(array(1)) //website ID the product is assigned to, as an array
                ->setAttributeSetId(20) //ID of a attribute set named 'default'
                ->setTypeId('simple') //product type
                ->setCreatedAt(strtotime('now')) //product creation time
                ->setSku($_POST['sku']) //SKU
                ->setName($_POST['product_name']) //product name
                ->setUrlKey($_POST['url_key'])
                ->setBrand($_POST['brand'])->setType($_POST['type'])
                ->setStatus($_POST['status'] == 1 ? 1 : 2) //product status (1 - enabled, 2 - disabled)
                ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility
                ->setNewsFromDate(strtotime('now')) //product set as new from
                ->setNewsToDate(strtotime('+1 week')) //product set as new to
                ->setPrice($_POST['price']) //price in form 11.22
                ->setCost($_POST['price']) //price in form 11.22
                ->setSpecialPrice($_POST['discount_price'])
                ->setMetaTitle($_POST['meta_title'])
                ->setMetaKeyword($_POST['meta_keyword'])
                ->setMetaDescription($_POST['meta_description'])
                ->setDescription($_POST['description'])
                ->setShortDescription($_POST['short_description'])
                ->setStockData(array(
                    'use_config_manage_stock' => 0, //'Use config settings' checkbox
                    'manage_stock' => 1, //manage stock
                    'min_sale_qty' => 1, //Minimum Qty Allowed in Shopping Cart
                    'max_sale_qty' => $_POST['quantity'], //Maximum Qty Allowed in Shopping Cart
                    'is_in_stock' => $_POST['quantity'] == 0 ? 0 : 1, //Stock Availability
                    'qty' => $_POST['quantity'] //qty
                        )
                )
                ->setCategoryIds(unserialize($_POST['product_groups_category_map'])); //assign product to categories
        Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
        $simpleProduct->save($simpleProduct);
        if (!empty($_POST['product_groups_images'])) {
            if ($_POST['id_in_magento'] != 0) {
                $mediaApi = Mage::getModel("catalog/product_attribute_media_api");
                $mediaApiItems = $mediaApi->items($simpleProduct->getId());
                foreach ($mediaApiItems as $item) {
                    $datatemp = $mediaApi->remove($simpleProduct->getId(), $item['file']);
                }
            }
            $simpleProduct->load($_POST['id_in_magento']);
            $simpleProduct->setMetaTitle($_POST['meta_title']);
            foreach (unserialize($_POST['product_groups_images']) as $img) {
                $simpleProduct->addImageToMediaGallery($img, array('image', 'small_image', 'thumbnail'), false, false);
            }
        }
        Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
        $simpleProduct->save($simpleProduct);
        $return['magento_id'] = $simpleProduct->getId();
        $return['url_key'] = $simpleProduct->getUrlKey();
    } catch (Exception $e) {
        Mage::log($e->getMessage());
        $return['error'] = $e->getMessage();
    }

代码有什么问题?

PS:

我重复一下,如果我试图从Magento网站的后端设置重复的SKU,它显示一个正常的错误,SKU不能被复制。

您可以在添加新产品之前查看sku,它将解决您的问题

$sku = 'sku_here';
$p_id = Mage::getModel('catalog/product')->getIdBySku($sku);
if ($p_id) {
   //sku exists
}
else {
   //sku does not exist
}