Jump to content

Prob utilisation de new Product dans un foreach ?


Recommended Posts

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 :huh:

Link to comment
Share on other sites

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

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 :unsure: enfin j'ai essayé le $product =  null, ou encore le unset($product), mais sa change rien...

Link to comment
Share on other sites

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

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...