Miguel Posted January 9, 2018 Share Posted January 9, 2018 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 More sharing options...
Daniel Jaimes Posted October 17, 2019 Share Posted October 17, 2019 (edited) 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 October 17, 2019 by Daniel Jaimes (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now