2016-10-27 6 views
2

Magentoコード(CodeIgniterプロジェクト)の外からMagento製品を更新する必要があるという要件があります。重複SKUを設定してもMagentoにエラーが表示されない

すべてがうまくいっていますが、同じSKUを持つ2つの製品を保存すると、1つのことが間違っています。私のコードは例外をスローしません。

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が重複することはできないという通常のエラーが表示されていることを繰り返します。

+0

を発行解決する新製品を追加する前に、SKUを確認することができますそれは重複ではなく、エラーメッセージを表示していますが、あなたのコードはそうではありません。 – Anigel

+0

@Anigel非公式コメント – Umair

+0

それについて非論理的なものは何ですか?エラーメッセージを生成するには、エラー状態を確認する必要があります。あなたはそれをやっていないか、少なくともあなたがあなたがそれを追加する前にSKUが存在するかどうかをチェックするコードには何もありません。 – Anigel

答えて

3

あなたはそれはあなたが重複したSKUを設定しようとすると、彼らが確認するためにチェックされている、磁気のバックエンド用のためのコードで、あなたが

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

SKUを別途チェックする必要があるのはなぜですか?なぜ重複したSKUを設定するときにmagentoが例外をスローしないのですか? – Umair

関連する問題