PSWebServiceLibrary - Webservice - Добавление продукта простым (без комбинации) есть проблема со склада - PullRequest
0 голосов
/ 19 февраля 2020

Я использую PSWebServiceLibrary, чтобы иметь «диалог» с Prestashop. Если я добавлю товар с этим простым кодом:

xmlResponse = $webService->get(['url' => PS_SHOP_PATH."/api/products?schema=blank"]);
$fieldsXML = $xmlResponse->product[0];
$fieldsXML->state = "1";
$fieldsXML->name = "test";
$fieldsXML->price = "10.00"; 
try {
    $addResponse = $webService->add([ 'resource' => "products", 'postXml' => $xmlResponse->asXML() ]);
    $fieldsXML = $addResponse->product[0];
    echo 'Enjoy-> Your product Id is: '.$fieldsXML->id;
} 
catch (PrestaShopWebserviceException $e) { 
    echo "No good -> ".$e->getMessage(); 
}

У меня есть новый продукт в каталоге-> продукты ... но у меня нет нового продукта в каталоге-> акции. Когда я go в каталог-> акции, моя консоль выдает такую ​​ошибку: TypeError: Невозможно прочитать свойство 'split' из null (stock.bundle. js? 1.7.6.3: 7)

Я видел, что PS создал в Dbase строку в таблице product_attribute, связанную с новым продуктом (вместо того, чтобы в таблицах не было строк типа product_attribute, product_attribute_combination, product_attribute_image, e cc)

Если я удаляю его (по phpMyAdmin), то все работает нормально, и продукт будет виден в запасах

Если я создаю продукт с помощью панели инструментов, все работает нормально, и если Я проверяю таблицу product_attribute там не правильно продукт

Я искал много решений, например, изменить значения атрибутов во вставке, изменить их во второй раз ... ничего.

Версия PrestaShop: 1.7.6.3:7 PHP версия: 7.0

1 Ответ

0 голосов
/ 20 февраля 2020

Я решил ... и думаю, что это ошибка Prestashop или PSWebServiceLibrary. С моим исходным кодом я получаю ВСЕ АТРИБУТЫ бланка продукта. Shema

$xmlResponse = $webService->get(['url' => PS_SHOP_PATH."/api/products?schema=blank"]);
$fieldsXML = $xmlResponse->product[0];

Я редактирую только некоторый атрибут

$fieldsXML->state = "1";
$fieldsXML->name = "test";
$fieldsXML->price = "10.00"; 
$fieldsXML->advanced_stock_management=true;
$fieldsXML->low_stock_alert=false;
$fieldsXML->minimal_quantity = "1"; 
$fieldsXML->available_for_order = true;
$fieldsXML->active = true; 

Я отправляю свой новый xml (атрибут отредактирован и другой полученный атрибут) в Prestashop.

$webService->add([ 'resource' => "products", 'postXml' => $xmlResponse->asXML() ]);

Проблема в том, что я получил от get ([...] ); Тег внутри $ fields XML имеет формат, например (например), а не Так, когда я редактирую атрибут, формат будет «правильным» (1), другой останется ... это будет проблемой при вставке продукта потому что кажется, что это не «полностью принято» Prestashop.

Чтобы решить проблему, я должен отредактировать каждый атрибут как пустой, а затем отредактировать то, что мне нужно. Это мой рабочий код:

$xmlResponse = $webService->get(['url' => PS_SHOP_PATH."/api/products?schema=blank"]);
$fieldsXML = $xmlResponse->product[0];
foreach ($fieldsXML as $nodeKey => $node){
    $fieldsXML->$nodeKey = "";
}
$fieldsXML->state = "1";
$fieldsXML->name = "test";
$fieldsXML->price = "10.00"; 
$fieldsXML->advanced_stock_management=true;
$fieldsXML->low_stock_alert=false;
$fieldsXML->minimal_quantity = "1"; 
$fieldsXML->available_for_order = true;
$fieldsXML->active = true; 
try {
    $addResponse = $webService->add([ 'resource' => "products", 'postXml' => $xmlResponse->asXML() ]);
    $fieldsXML = $addResponse->product[0];
    echo 'Enjoy-> Your product Id is: '.$fieldsXML->id;
} 
catch (PrestaShopWebserviceException $e) { 
    echo "No good -> ".$e->getMessage(); 
}

Я надеюсь, что я хорошо объяснил и что это полезно для всех ... потому что в Интернете не так много информации.

...