如何使用prestashop Web服务更新产品类别?

时间:2016-04-27 07:45:11

标签: php prestashop prestashop-1.6

您好我想远程更新所有"属性"与使用prestashop web服务的产品相关。我一直试图更新其类别几天没有成功。我正在使用prestashop_1.6.1.5。 在doc之后,你可以得到像这样的产品xml

$xml = $this->webService->get(array('url' => 'http://prestashop.localhost/api/products/2'));

var_dump($xml);

$resources = $xml->children()->children();

然后,如果你这样做

$resources->reference = "NEW REFERENCE";

,您可以修改参考,例如。

可以通过

查看其类别
$resources->associations->categories->categories

您将获得与该产品相关的类别ID数组。但如果你这样做:

$resources->associations->categories->categories[2] = 8

您不会将与产品关联的第三个类别更新为8.它将保持为0。 我也试过给它一个字符串。我试图取消设置整个类别节点,使用与其使用的格式相同的格式创建自己的节点,然后再次进行分配。我还尝试创建一个SimpleXMlElement,并为我想要修改的每个id添加addChild()。但没有任何效果。

有人知道如何更新类别吗?

我还有另一个问题,这些类别ID与产品xml中出现的default_category_id有什么区别?如果您看到prestashop DDBB,则default_category_id不会出现在中间表中。我的意思是如果default_category_id是9,那么当您开始使用prestashop时,其他ID就是2,3,4和7。

提前致谢

1 个答案:

答案 0 :(得分:3)

类别可以像这样更新:

$id_product = 102;
$new_product_categories = array(29,30,31); // List of categories to be linked to product

$xml = $this->webservice->get(array('resource' => 'products', 'id' => $id_product));

$product = $xml->children()->children();

// Unset fields that may not be updated
unset($product->manufacturer_name);
unset($product->quantity);

// Remove current categories
unset($product->associations->categories); 

// Create new categories
$categories = $product->associations->addChild('categories'); 

foreach ($new_product_categories as $id_category) {
    $category = $categories->addChild('category');
    $category->addChild('id', $id_category);
}

$xml_response = $this->webservice->edit(array('resource' => 'products', 'id' => $id_product, 'putXml' => $xml->asXML()));