Raph59 Posted August 29, 2016 Share Posted August 29, 2016 Bonjour à tous Bon j'ai quasiment finit mon module qui sert à importer des produits sur prestashop via un csv en ligne, ce module fonctionne parfaitement si j'importe produit par produit, en revanche si j'ai plusieurs produit à importer d'un coup, il m'importe que le premier produit et mais pas les autres! En revanche il prend bien les ID produit des autres produit, mais ne les utilise pas au final.... je vais vous donner un exemple avec une simplification du code $listProducts = Array(...); // Liste des produits à créer foreach($listProducts AS $listProduct) { $product = new Product(); /* ICI JE MET TOUTE LES INFOS DU PRODUIT */ $product->active = 1; /* Ect.. */ if($product->add()) // je sauvegarde le produit echo 'Le produit '.$product->id.' a bien été créé!<br />'; } Donc dans cet exemple par exemple, après exécution du code, sa va m'afficher : Le produit 1 a bien été créé! Le produit 2 a bien été créé! Le produit 3 a bien été créé! Le produit 4 a bien été créé! Le produit 5 a bien été créé! Mais en allant dans le back office et même en vérifiant dans la BDD, il n'y a eu que le premier produit de créé réellement, pas les autres! Et si j'en créé un nouveau, il va me créer le 6!! Donc je ne sais pas ce qu'il a fait du reste Oo Alors je me disais qu'il existe peut être une fonction pour fermer mon objet $product qu'il faut placer après le add ? genre par exemple $product->close ou un truc du genre ? Merci beaucoup pour votre lecture, et n'hésitez pas à me donner des pistes même si vous ne connaissez pas la réponse car là je commence à manquer d'idée Link to comment Share on other sites More sharing options...
Raph59 Posted August 29, 2016 Author Share Posted August 29, 2016 Non car je fait plusieurs manipulation avant d'insérer le fichier. J'ai complété les infos que je met, bon du coup ya certaine variable qui sont pas ok par rapport a mon exemple du début, c'était juste pour donner un exemple de l'utilisation que je fait de new Product et ->add dans une boucle. $listProducts = Array(...); // Liste des produits à créer foreach($listProducts AS $listProduct) { $product = new Product(); /* ICI JE MET TOUTE LES INFOS DU PRODUIT */ $p->id_category_default = $productToCreate['id_category']; $p->weight = number_format(((float)$productToCreate['weight']*$formatPoids), 6, '.', ''); $p->out_of_stock = 2; $p->active = 1; $p->wholesale_price = '0.000000'; $p->price = '0.000000'; $p->id_tax_rules_group = 1; $p->id_manufacturer = (int)$productToCreate['id_manufacturer']; $p->id_supplier = (int)$productToCreate['id_supplier']; $p->quantity = 0; $p->minimal_quantity = 1; $p->additional_shipping_cost = 0; $p->ecotax = 0; $p->available_for_order = 1; $p->show_price = 1; $p->on_sale = 0; $p->online_only = 0; $p->available_now = array($id_lang => (string)('En Stock - Expédié sous 24 à 72H')); $p->available_later = array($id_lang => (string)('En Stock - Expédié sous 24 à 72H')); $p->name = array($id_lang => (string)$productToCreate['name']); $p->link_rewrite = array( $id_lang => Tools::link_rewrite((string)$productToCreate['name']) ); $p->description_short = array($id_lang => ' <p>'.(string)$productToCreate['name'].'</p> <p>'.(string)$productToCreate['description'].'</p> '. ( $composition ? '<p>Composition: '.$productToCreate['composition'].'</p>' : '') .' '); $p->description = array($id_lang => ' '. ( $composition ? '<p>Composition = '.$productToCreate['composition'].'</p>' : '') .' <p>'.(string)$productToCreate['description'].'</p> '); /* Ect.. */ if($product->add()) // je sauvegarde le produit echo 'Le produit '.$product->id.' a bien été créé!<br />'; } Link to comment Share on other sites More sharing options...
Raph59 Posted August 29, 2016 Author Share Posted August 29, 2016 Je suis peut être sur une mauvaise piste, mais j'ai l'impression qu'il faudrait que je "ferme" mon $product à la fin de la boucle afin qu'il soit "libre" pour la boucle suivante... je ne sais pas si je suis très claire enfin j'ai essayé le $product = null, ou encore le unset($product), mais sa change rien... Link to comment Share on other sites More sharing options...
Eolia Posted August 30, 2016 Share Posted August 30, 2016 Non, à partir du moment où vous faites une boucle foreach, le nouveau $product écrase le précédent. Si lors d'un nouvel import l'ID est à 6 c'est que les 5 autres produits existent en base (vérifiez dans ps_product & ps_product_shop) J'ai bien l'impression que vos produits ne sont pas associés au bon shop (genre produit1 est associé à shop 1 (bon) et produit 2 à shop 2 ou un truc du genre...) je me trompe peut-être mais je n'ai qu'une partie du code sous les yeux^^ 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