我使用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();
}
我的目录->产品中有新产品...,但目录->库存中没有新产品。 当我转到目录->股票时,控制台显示如下错误: TypeError:无法读取null的属性“ split”(stock.bundle.js?1.7.6.3:7)
我已经看到PS在Dbase中创建了与新产品相关联的表product_attribute
中的一行(而不是像product_attribute
,product_attribute_combination
,{ {1}},等等)
如果我(通过phpMyAdmin删除),则一切正常,该产品将在库存中可见
如果我通过仪表板创建产品,则一切正常,如果我检查表product_attribute_image
,则该产品不正确
我搜索了许多解决方案,例如在插入中更改属性值,第二次更改它们……什么都没有。
PrestaShop版本:1.7.6.3:7 PHP版本:7.0
答案 0 :(得分:0)
我已经解决了...,我认为这是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([...])得到的结果中; $ fieldsXML内的标签的格式类似(例如),而不是 因此,当我编辑属性时,格式将是“正确的”(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();
}
我希望我已经解释清楚,并且对每个人都有帮助...因为网上没有太多信息。