【问题标题】:How can I update product categories using prestashop web service?如何使用 prestashop 网络服务更新产品类别?
【发布时间】:2016-08-21 09:01:30
【问题描述】:

您好,我想使用 prestashop 网络服务远程更新与产品相关的所有“属性”。几天来,我一直在尝试更新其类别,但未成功。我正在使用 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 并使用 addChild() 为我要修改的每个 id 添加它。但没有任何效果。

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

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

提前致谢

【问题讨论】:

    标签: php prestashop prestashop-1.6


    【解决方案1】:

    类别可以这样更新:

    $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()));
    

    【讨论】:

    • 我已经使用此代码,它适用于单次更新,但是当我添加此代码以更新多个产品时,会出现 HTTP XML 响应无法解析之类的问题:array ( 0 => LibXMLError::__set_state(array ( 'level' => 3, 'code' => 64, 'column' => 6, 'message' => 'XML 声明只允许在文档的开头', 'file' => '', 'line ' => 2, )), )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多