Jump to content

Developpement d'un module de création dynamique de produit


Recommended Posts

Bonjour à tous,

 

Je suis en train de créer un module sous PS 1.6 pour pouvoir créer un produit à partir d'un formulaire que remplit le client. Le client remplit donc le formulaire avec des les caractéristiques qu'il veut (dimensions, couleur, etc) ce qui fera changer le prix et le produit devra être ajouté à son panier une fois le formulaire rempli.

 

Pour la partie formulaire, ça ne pose pas de souci et je devrais pouvoir ajouter mon produit au panier avec la méthode updateQty() de Cart.php mais je n'arrive pas à trouver le moyen d'instancier mon Product à partir des données de mon formulaire.

Est-ce que quelqu'un a déjà réussi à faire ça? J'ai essayé de le faire en rajoutant directement dans les base de données mais forcément ça ne pouvait pas être aussi simple

Merci par avance et j'espère que vous pourrez m'aider !

Edited by kaamyi (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

 

Pour créer un nouveau produit le plus simple est de passer par un nouvel objet "produit" avec un code de ce type ( en remplaçant avec les variables réceptionnées par ton formulaire.

$product = new Product();
                $languages = Language::getLanguages();
                foreach ($languages as $lang) {
                    $product->name[$lang['id_lang']] = $productName;
                    $product->link_rewrite[$lang['id_lang']] = $productLink;
                    $product->description[$lang['id_lang']] = $productText;
                }
                $product->reference = $productReference;
                $product->quantity = 10;
                $product->id_category_default = 2;
                $product->price = 0;
                $product->id_tax_rules_group = 1;
                $product->indexed = 0;

                
                try {
                    $product->save();
                } catch (PrestaShopException $e) {
                   echo $e->displayMessage();
                }

N'hésites pas à consulter le fichier class/Product.php

Share this post


Link to post
Share on other sites

Bonjour et merci beaucoup.

 

A priori, j'ai réussi à créer mon produit et à l'ajouter au panier mais lorsque j'essaie de modifier un des champ du produit en back office j'ai ces erreurs-là :

 

"2 erreurs

  1. Le produit doit être au minimum dans une catégorie.
  2. Ce produit doit être dans la catégorie par défaut."

 

Et si j'essaye d'y accéder va sur mon panier j'obtiens cette erreur :

 

"Il y a 1 erreur

  1. vous n'avez pas accès à ce produit"

 

J'ai pourtant bien spécifié la catégorie, il doit y avoir une méthode à invoquer pour associer la catégorie au produit dans la table category_product parce qu'elle ne semble pas associée. Est-ce que ça ne serait pas :

/**
	* Update categories to index product into
	*
	* @param string $productCategories Categories list to index product into
	* @param boolean $keeping_current_pos (deprecated, no more used)
	* @return array Update/insertion result
	*/
	public function updateCategories($categories, $keeping_current_pos = false)
	{
		if (empty($categories))
			return false;

		$result = Db::getInstance()->executeS('
			SELECT c.`id_category`
			FROM `'._DB_PREFIX_.'category_product` cp
			LEFT JOIN `'._DB_PREFIX_.'category` c ON (c.`id_category` = cp.`id_category`)
			'.Shop::addSqlAssociation('category', 'c', true, null, true).'
			WHERE cp.`id_category` NOT IN ('.implode(',', array_map('intval', $categories)).')
			AND cp.id_product = '.$this->id
		);

		// if none are found, it's an error
		if (!is_array($result))
			return false;

		foreach ($result as $categ_to_delete)
			$this->deleteCategory($categ_to_delete['id_category']);

		if (!$this->addToCategories($categories))
			return false;

		SpecificPriceRule::applyAllRules(array((int)$this->id));
		return true;
	}

Ca a fonctionné avec cette fonction. C'est résolu !

Edited by kaamyi (see edit history)

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More