Jump to content

Añadir varias categorias a un producto via WebService


Recommended Posts

Hola compañeros

Seguimos en la nave del misterio de PrestaShop... Esta vez con una nueva entrega que nos dejará un poco incrédulos... y se trata de como poder agregar varias categorías a un mismo producto cuando lo estas agregando con php via webservice ... y es que a pensar de los varios intentos realizados, no se consigue agregar ninguna nueva categoría al producto aparte de la indicada en el "id_default_category" ...  

Os pongo por aquí el codigo utilizado esperando que alguien pueda vislumbrar donde está el problema o cual sería el procedimiento correcto a seguir para la version 1.7 ...

Se trata de agregar varias categorias en las "associations" ... pero el siguiente cógido no me está funcionando y no agrega ninguna categoria extra ...

 

try {


    $webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
    $opt = array('resource' => 'products');
    $xml = $webService->get(array('url' => PS_SHOP_PATH . '/api/products?schema=blank'));
    $resource_product = $xml->children()->children();

    unset($resource_product->id);
    unset($resource_product->position_in_category);
    unset($resource_product->manufacturer_name);
    unset($resource_product->id_default_combination);
    unset($resource_product->associations);

    $resource_product->id_shop = 1;
    $resource_product->minimal_quantity = 1;
    $resource_product->available_for_order = 1;
    $resource_product->show_price = 1;
    //$resource_product->quantity = 10;           // la cantidad hay que setearla por medio de un webservice particular
    $resource_product->id_category_default = 2;   // PRODUCTOS COMO CATEGORÍA RAIZ
    $resource_product->price = 12.23;
    $resource_product->active = 1;
    $resource_product->visibility = 'both';
    $resource_product->name->language[0] = "blablabla";
    $resource_product->description->language[0] = "blablabla";
    $resource_product->state = 1;

    $resource_product->addChild('associations')->addChild('categories')->addChild('category')->addChild('id', '5');
    //$resource_product->associations->categories->category->addChild('id', 5);

    $opt = array('resource' => 'products');
    $opt['postXml'] = $xml->asXML();
    $xml = $webService->add($opt);
    $id = $xml->product->id;
    echo "<p>PRODUCTO " . $id . " AÑADIDO</p>";


    // CHAPTER 2 //

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

    $xml = $webService->get(array('resource' => 'products', 'id' => $id));

    $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 = $webService->edit(array('resource' => 'products', 'id' => $id, 'putXml' => $xml->asXML()));

    echo "<p>PRODUCTO " . $xml_response->product->id. "  ACTUALIZADO CON CATEGORIAS</p>";


} catch (PrestaShopWebserviceException $e) {
    // Here we are dealing with errors
    $trace = $e->getTrace();
    if ($trace[0]['args'][0] == 404) echo 'Bad ID';
    else if ($trace[0]['args'][0] == 401) echo 'Bad auth key';
    else echo '<b>ERROR:</b> ' . $e->getMessage();
}

Como podréis observar, lo intento de dos maneras... una creando el producto, y otra intentanto acualizar el producto, pero en ambos casos la asociacion no se realiza

Este es el resultado obtenido en associations, vacio... :

<associations>
            <categories nodeType="category" api="categories"/>
            <images nodeType="image" api="images"/>
            <combinations nodeType="combination" api="combinations"/> ....

 

o.O ...  Podría ser un error del WebService???  ... Alguien ve el fallo?

Muchas gracias

Miguel

 

 

 

Link to comment
Share on other sites

  • 1 year later...

Hola amigo,

   Tuve el mismo problema, me fijé en tu código y pude resolver un par de cosas que también me estaban fallando, por lo cual vi justo dejar la solución a tu problema aquí:

Sólo debes cambiar:    

    $resource_product->addChild('associations')->addChild('categories')->addChild('category')->addChild('id', '5');

por:

    $resource_product->associations->categories->addChild('category')->addChild('id', '5');

// en el caso que quieras añadir otras más

  $resource_product->associations->categories->addChild('category')->addChild('id', '6');

  $resource_product->associations->categories->addChild('category')->addChild('id', '7');

La cuestión es que debemos crear nodos nuevos a partir de "category", porque si lo hacemos antes se duplican los nodos y no actualiza el original.

Edited by Daniel Jaimes (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...