Magento 1.5, числовые SKU и productIdentifierType

В Magento 1.5 такой доступ к вызову API catalogProductInfo из C# работает с нечисловыми SKU:

catalogProductRequestAttributes fetchattrib = new catalogProductRequestAttributes();
fetchattrib.attributes = new string[] { "name", "description", "and_so_on"};
fetchattrib.additional_attributes = new string[] { "custom_attribs_go_here"};

string storeView = null;
string productIdentifierType = null;
catalogProductReturnEntity ret = m_magentoClient.catalogProductInfo(
    sessionId, sku, storeView, fetchattrib, productIdentifierType);

Но с числовыми SKU я получаю сообщение об ошибке «Продукт не существует».
Предположительно, это связано с тем, что Magento не может определить, передаете ли вы ему product_id или SKU. Установка для productIdentifierType значения «sku» должна исправить это, теоретически, согласно всей документации, которую я могу найти:

...
string productIdentifierType = "sku";
...

Но это не исправляет ситуацию.
На самом деле, кажется, что это только усугубляет ситуацию, Magento перестает находить нечисловые SKUS.
Таким образом, предположительно "sku" не является правильным значением для передачи.

У кого-нибудь есть идеи?


person codeulike    schedule 19.07.2011    source источник
comment
У вас уже есть ответ на этот вопрос?   -  person    schedule 28.08.2011
comment
Нет, я перешел на нечисловые SKU, чтобы обойти проблему.   -  person codeulike    schedule 29.08.2011
comment
stackoverflow.com/questions/7835571/   -  person tuxmytty    schedule 21.10.2011
comment
@tuxmytty: интересно - если вы хотите опубликовать аналогичный ответ здесь (это ошибка, и вот некоторые исправления), то я проголосую за вас :)   -  person codeulike    schedule 21.10.2011


Ответы (2)


Короткий ответ: где-то есть ошибка, не позволяющая правильно установить последний параметр product.update (или, возможно, Varien еще не реализовала его), что также представляет проблему для метода product.info.

Быстрый обходной путь (если вы не возражаете потерять возможность обновления по идентификатору) — просто установить $identifierType в методе Product API update()):

In app/code/core/Mage/Catalog/Model/Product/Api.php l.198

public function update($productId, $productData, $store = null, $identifierType = 'sku')

И, наконец, загрузите продукт в условии if ($idBySku) метода getProduct() около l.427 app/code/core/Mage/Catalog/Helper/Product.php.

$productId = $idBySku;
$product->load($productId);

Это немного выдумка. Я поищу лучший обходной путь в качестве переопределения; в противном случае, возможно, кто-то другой может опубликовать лучшее решение.

person tuxmytty    schedule 21.10.2011

Существует обходной путь для чисто числового или смешанного SKU, который хорошо работает для меня.

Просто добавьте пробел в конце артикула. Magento будет интерпретировать значение как SKU, поскольку пробел не является числовым. Internaly Magento обрезает пробелы позже

Это отлично работает с Magento 1.4.x - 1.9. (Изменить: спасибо Бретту за тестирование версии 1.9)

Пример:

    catalogProductReturnEntity ret = m_magentoClient.catalogProductInfo(sessionId, sku+" ", storeView, fetchattrib, productIdentifierType); 
person TurmDrummer    schedule 06.06.2012
comment
Я предпочитаю этот метод, даже если он грязный, но он работает. И magento должен знать об этом :) - person Dzung Nguyen; 04.07.2012
comment
Отличный обходной путь! Самое странное, что вы не можете использовать значение sku для $identifierType при попытке обновить продукт по SKU, потому что getProduct() не установит $loadByIdOnFalse=true и, следовательно, продукт не будет загружен (EE 1.11.2.0) ! - person Jan Wy; 11.02.2013