Jump to content
Novina

Ajouter un produit personnalisé au panier

Recommended Posts

Bonjour,

Je développe actuellement un module qui doit s'afficher sur la fiche produit.

En fonction des différentes caractéristiques (= des champs), j'aimerai varier le prix du produit et ajouter des précisions textuelles sur la nature de la commande (ex: le nom de la police de caractères sélectionné ou ajouté).

A partir de mon module en Javascript, j'arrive à facilement intercepter la requête d'ajout au panier :

prestashop.on('updateCart', function (event) {
  if(event.reason.linkAction !== undefined && event.reason.linkAction == "add-to-cart") {
    if(event.reason.idProduct != undefined) {
      // mon code
    }
  }
}

Est-ce qu'à ce moment là, je peux modifier la commande en fonction de mes propres caractéristiques ?

Je sais que la modale ne s'affiche pas tout de suite, ce qui semble laisser du temps pour modifier le contenu du panier.

Merci d'avance pour vos réponses.

Share this post


Link to post
Share on other sites

Si vous décidez de passer par le js vous serez obligé d'utiliser une requête ajax pour modifier le produit avant de l'ajouter au panier.

Les données Prestashop sont sur le serveur en php/sql, javascript n'est que côté client. Il y a donc un moment où il faut les stocker/enregistrer.

Share this post


Link to post
Share on other sites

Merci Eolia pour votre réponse.

Je ne souhaite pas modifier le produit, seulement influer sur le panier en cours. C'est un module de personnalisation avec des calculs de surfaces, selon la dimension au m² le prix est modifié et des caractéristiques  sont ajoutées (comme sources d'informations, des simples notes de commande).

Ceci étant, je ne sais pas si Prestashop a déjà prévu quelque chose. Il envoi directement une requête sur le panier, ne puis-je pas modifier ces informations ? En PHP ou JS ? Si oui comment ? :)

Je capte ça :

HTTP POST /panier.php
token: 6c7934357727ed8d7522bc7aabe2dde2
id_product: 55
id_customization: 0
group[15]: 60
group[14]: 55
qty: 1
add: 1
action: update

Merci encore.

Edited by Novina (see edit history)

Share this post


Link to post
Share on other sites

c'est bien ce que je dis...

Prestashop n'envoie aucune info sur le prix en js. Par contre vous pouvez créer votre personnalisation à la volée (id_customization) avec son prix, mais ca c'est uniquement en php.

Share this post


Link to post
Share on other sites

J'ai réussi à ajouter un produit à mon panier côté PHP :

/* Données */
$id_product = (int)Tools::getValue('id_product');
$id_customization = (int)Tools::getValue('id_customization'); // = 0
$price_product = (int)Tools::getValue('priceform'); // nouveau prix
/* Créer le panier */
if(!$this->context->cart->id) {
	/* Identifier l'utilisateur connecté */
	if($this->context->cookie->id_guest) {
		$guest = new Guest($this->context->cookie->id_guest);
		$this->context->cart->mobile_theme = $guest->mobile_theme;
	}
	$this->context->cart->add();
	/* Créer le cookie */
	if($this->context->cart->id) {
		$this->context->cookie->id_cart = (int)$this->context->cart->id;
	}
}
/* Sélectionner le panier */
$cart = $this->context->cart;
/* Sélectionner le produit */
$product = new Product($id_product, true, (int)($this->context->cookie->id_lang));
$id_product_attribute = Product::getDefaultAttribute($id_product);
/* Ajouter au panier */
$cart->updateQty(1, $id_product, $id_product_attribute, $id_customization);

Quelle méthode dois-je utiliser pour modifier le prix ? et ajouter un champ personnalisé (j'ai pas bien compris la méthode "addTextFieldToProduct") ?

Merci d'avance.

Share this post


Link to post
Share on other sites

Re-up. Est-ce que quelqu'un pourrait m'aider ou m'orienter vers une solution ?

Je souhaite seulement avec mon module ajouter au panier, une version modifié d'un produit déjà en base :

- Un prix modifié.

- Des déclinaisons choisies (je récupère les données $_GET['group[X]'] de mon formulaire).

- Des informations complémentaires au format chaîne de caractères (taille, choix d'une police, etc).

Il faudrait que j'arrive à compléter le code avec les bonnes instructions (voir le message précèdent).

Merci d'avance pour vos réponses.

Edited by Novina (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

×
×
  • Create New...

Important Information

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