Serial Posted February 26, 2018 Share Posted February 26, 2018 Bonjour, Dans mon module, j'ai besoin d'ajouter un produit au panier. Le plus délicat, c'est que j'ai besoin d'envoyer une chaîne de caractère correspondant au texte de la personnalisation du produit (je me souviens plus si celle-ci est limitée en termes de caractères). Comment faire cela en PS 1.6 ? Merci par avance Link to comment Share on other sites More sharing options...
Serial Posted February 28, 2018 Author Share Posted February 28, 2018 (edited) J'ai réussi à ajouter mon produit dans mon panier avec ce code ci-dessous : if (Tools::isSubmit('submit_confection')) { $id_prod = Tools::getValue('produit_id'); $ipa = Tools::getValue('ipa'); $customData = "My customize text"; $qty = 1; if (is_null($this->context->cart->id)) { $this->context->cart->add(); $this->context->cookie->__set('id_cart', $this->context->cart->id); } // get cart id if exists if ($this->context->cookie->id_cart) { $cart = new Cart($this->context->cookie->id_cart); } // create new cart if needed if (!isset($cart) OR !$cart->id) { $cart = new Cart($this->context->cookie->id_cart); $cart->id_customer = (int)($this->context->cookie->id_customer); $cart->id_address_delivery = (int) (Address::getFirstCustomerAddressId($cart->id_customer)); $cart->id_address_invoice = $cart->id_address_delivery; $cart->id_lang = (int)($this->context->cookie->id_lang); $cart->id_currency = (int)($this->context->cookie->id_currency); $cart->id_carrier = 1; $cart->recyclable = 0; $cart->gift = 0; $cart->add(); $this->context->cookie->id_cart = (int)($cart->id); } $product = new Product((int)$id_prod); if ($ipa > 0) { $minimal_quantity = (int)Attribute::getAttributeMinimalQty($this->id_product_attribute); } else { $minimal_quantity = (int)$product->minimal_quantity; } // add customizatated text $check =serialize($customData); $id_address_delivery = $cart->id_address_delivery; $customization = $this->context->cart->addTextFieldToProduct((int)($id_prod), 9, Product::CUSTOMIZE_TEXTFIELD, serialize($customData)); $exising_customization = Db::getInstance()->executeS('SELECT id_customization FROM '._DB_PREFIX_.'customized_data ORDER BY id_customization DESC LIMIT 0,1'); $customization = $exising_customization[0]['id_customization']; Db::getInstance()->execute('UPDATE ps_customization SET in_cart = 1, id_product_attribute = '.$ipa.',id_address_delivery='.$id_address_delivery.',quantity='.$minimal_quantity.' WHERE id_customization = ' .$customization); // get product to add into cart $productToAdd = new Product((int)($id_prod), true, (int)($this->context->cookie->id_lang)); $cart->update(); $this->context->cart->updateQty((int)($qty),(int)($id_prod),(int)($ipa),$customization,'up',(int)($id_address_delivery)); $cart->update(); } Par contre, ca m'ajoute 4 fois le produit au panier :/ Ensuite, lorsque je passe ma commande et que je la valide, dans mon BO, je ne vois pas ce texte de personnalisation. Il est bien présent dans la base de données pourtant, dans la table ps_customized_data. Une idée :/ ? Edited February 28, 2018 by Serial (see edit history) Link to comment Share on other sites More sharing options...
hasniou Posted April 17, 2018 Share Posted April 17, 2018 Bonjour, J'ai le même problème avec updateQty() : $this->context->cart->updateQty, $id_product, $id_product_attribute, $id_customization); La quantité du produit s'ajoute en double dans le panier. Quelqu'un a trouvé une solution ? Link to comment Share on other sites More sharing options...
LauraPresta Posted June 7, 2018 Share Posted June 7, 2018 Toujours pas ? Link to comment Share on other sites More sharing options...
hasniou Posted June 8, 2018 Share Posted June 8, 2018 Concernant le problème de quantité : La méthode updateQty() appel à son tour la méthode _updateCustomizationQuantity() qui s'en charge de modifier la quantité dans la table ps_customization (augmente ou diminue). Avant d’appeler updateQty(), la customization doit être ajouté avec 'quantity' = 0 et 'in_cart' = 0 (la méthode _updateCustomizationQuantity() s'en chargera de mettre à jour ces deux paramètres par la suite) $data = array( 'id_product_attribute' => $line['id_product_attribute'], 'id_address_delivery' => (int)$this->context->cart->id_address_delivery, 'id_cart' => (int)$this->context->cart->id, 'id_product' => (int)$line['article_id'], 'quantity' => 0, 'in_cart' => 0 ); Db::getInstance()->insert('customization', $data); $this->context->cart->updateQty((int)$line['quantity'], $line['article_id'], $line['id_product_attribute'], $id_customization); 1 Link to comment Share on other sites More sharing options...
LauraPresta Posted June 8, 2018 Share Posted June 8, 2018 (edited) Hello hasniou, Merci pour ta réponse ça m'a permis d'avancer. Petites questions peut-être bêtes.. : - c'est normal que ça fonctionne uniquement sur un produit qui est configuré dans le BO avec des champs personnalisés ? (je vois que des modules le font sans cette astuce) - et je vois aussi que le produit quand il est à 1 unité ne peut être enlevé du panier : "erreur quantité minimale requise = 1 ", j'ai pu régler en changeant dans la config du produit dans le BO quantité minimale = 0 mais ça me parait bizarre aussi comme astuce j'ai édité une question qui n'avait pas lieu d'être :-) Edited June 8, 2018 by LauraPresta (see edit history) Link to comment Share on other sites More sharing options...
hasniou Posted June 8, 2018 Share Posted June 8, 2018 Je pense que les modules activent dans le BO les champs de personnalisation (c'est aussi mon cas) Non ce n'est pas normal tu peux montrer une capture d'écran ? Link to comment Share on other sites More sharing options...
hasniou Posted June 8, 2018 Share Posted June 8, 2018 Quantité minimal peut rester 1 il doit y avoir une erreur quelque part 1 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