Jump to content

Ajout produit au panier avec texte de personnalisation


Recommended Posts

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

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 by Serial (see edit history)
Link to comment
Share on other sites

  • 1 month later...

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

  • 1 month later...

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);

 

 

 

  • Like 1
Link to comment
Share on other sites

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 by LauraPresta (see edit history)
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...