2014-08-30 3 views
1
$result = $client->call($session, 'catalog_product.update', array('123', array(
                  'name' => 'Product333222' 
                 ) 
                ) 
                ); 

Здесь «123» - это Ску продукта. Sku здесь не работает в обновлении Api.Sku не работает в magento обновление продукта API

Если я дам идентификатор продукта вместо Sku, он работает нормально.

Так в чем же проблема.

Если кто-либо знает, пожалуйста, дайте мне знать.

Спасибо.

ответ

2

Magento здесь немного скучно.

Короче говоря:

Если используется числовое значение без указания идентификационного типа его при условии, что вы делаете ваши работы по идентификатору продукта. Если вы хотите вставить «abc» в качестве значения (не числового), ему будет угрожать SKU.

Лучший способ решить эту проблему - использовать идентификационный код (в вашем случае «SKU») в вашем апи-вызове.

Чтобы ознакомиться с деталями, нажмите здесь. http://www.magentocommerce.com/api/soap/catalog/catalogProduct/catalog_product.update.html

Или смотрите: Magento 1.5, numeric SKUs and productIdentifierType

Короткий рассказ долго:

Следующая функция вызывается корыта апи приложение/код/​​ядро ​​/ Mage/Каталог/Модель/Api/Resource.php

protected function _getProduct($productId, $store = null, $identifierType = null) 
{ 
    $product = Mage::helper('catalog/product')->getProduct($productId, $this->_getStoreId($store), $identifierType); 
    if (is_null($product->getId())) { 
     $this->_fault('product_not_exists'); 
    } 
    return $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, как «123» thrid линии собирается сделать матч PREG с приведет к истинному. Таким образом, используя свою функцию else, обрабатывая ее как идентификатор вместо sku.

В конце:

Таким образом, сделать свой вызов, как:

$result = $client->call($session, 'catalog_product.update', array('123', array(
                  'name' => 'Product333222' 
                 ), null, 'sku')); 
Смежные вопросы