Options de produits cartClass->addProduct

  • Posts: 461
  • Thank you received: 32
  • Hikamarket Multivendor Hikashop Business
1 month 9 hours ago #365323

Bonjour,

ca faisait longtemps :) Meilleurs vœux !

J'aimerais savoir si le peux utiliser le paramètre options de la fonction addProduct pour faire en sorte qu'un produit soit gratuit

J'ai actuellement un formulaire qui permet à un vendeur de passer commande au nom de son client, puis le panier est créé dans ma fonction suivante (tout fonctionne très bien) :

public function setCart($post)
    {
        // load db
        $db = Factory::getDbo();
        // load hikashop
        if (!@include_once(rtrim(JPATH_ADMINISTRATOR, DS) . DS . 'components' . DS . 'com_hikashop' . DS . 'helpers' . DS . 'helper.php')) {
            return false;
        }
        $cartClass = hikashop_get('class.cart');

        // edit data unique
        if (!empty($post['action']) and $post['action'] == 'set_data') {
            $query = $db->getQuery(true);
            $fields = array(
                $db->quoteName($post['name']) . ' = ' . $db->quote($post['value'])
            );
            $conditions = array(
                $db->quoteName('cart_id') . ' = ' . $db->quote($post['id'])
            );
            $query->update($db->quoteName('#__hikashop_cart'))->set($fields)->where($conditions);
            $db->setQuery($query);
            $db->execute();
        }
        // création
        elseif (empty($post['cart_id'])) {
            // save cart
            $cart = new stdClass();
            $cart->cart_billing_address_id = $post['order_billing_address_id'];
            $cart->cart_shipping_address_ids = $post['order_shipping_address_id'];
            $cartClass->save($cart);

            // changement manuel de user_id (automatiquement user connecté)
            self::setCart(array('action' => 'set_data', 'name' => 'user_id', 'value' => $post['order_user_id'], 'id' => $cart->cart_id));

            // add products
            foreach ($post['order_product'] as $product_id => $qty) {
                $products = array(array('id' => $product_id, 'qty' => $qty));
                $cartClass->addProduct($cart->cart_id, $products);
            }

            // add free products
            foreach ($post['free_order_product'] as $product_id => $qty) {
                $products = array(array('id' => $product_id, 'qty' => $qty));
                $cartClass->addProduct($cart->cart_id, $products);
            }

            // méthodes de livraison
            $cartClass->updateShipping($cart->cart_id, self::setCartShippingMethod($cart->cart_id));

            // méthode de paiement
            $cartClass->updatePayment($cart->cart_id, array(1));

            return $cart->cart_id;
        }
        // modification
        else {
            foreach ($post['order_product'] as $product_id => $qty) {
                $cartClass->update($product_id, $qty);
            }

            return $post['cart_id'];
        }
    }

J'ai ajouté dans mon formulaire la possibilité d'ajouter des produits gratuits, exemple, pour 5 acheté, 1 gratuit, j'ai différencié ces produits par le name de l'input et ajouté une boucle à ma fonction, identique à la première, celle à laquelle j'aimerais ajouter l'option (produit gratuit) :
 // add free products
            foreach ($post['free_order_product'] as $product_id => $qty) {
                $products = array(array('id' => $product_id, 'qty' => $qty));
                $cartClass->addProduct($cart->cart_id, $products, $options);
            }
Que puis-je mettre dans ma variable $options pour avoir mon résultat svp ? si c'est possible

merci :)

Please Log in or Create an account to join the conversation.

  • Posts: 83303
  • Thank you received: 13468
  • MODERATOR
1 month 5 hours ago #365325

Bonjour,

Et meilleurs voeux également !

Il n'y a rien que vous puissiez mettre dans $options qui permettrait de rendre le produit gratuit sans rien d'autre.
Ce que je vous recommande de faire, c'est faire une requête MySQL après l'appel à addProduct pour rajouter l'information dans une colonne de la table hikashop_cart_product que vous aurez rajoutée via PHPMyAdmin au préalable.
Ensuite, implémentez onAfterLoadProductPrice pour modifier le prix du produit dynamiquement en fonction de la valeur dans cette colonne lors du chargement du panier:
www.hikashop.com/support/documentation/6...fterLoadProductPrice

Please Log in or Create an account to join the conversation.

  • Posts: 461
  • Thank you received: 32
  • Hikamarket Multivendor Hikashop Business
4 weeks 2 days ago #365333

Bonjour,

merci beaucoup, je vais donc suivre cette piste :)

Please Log in or Create an account to join the conversation.

Time to create page: 0.053 seconds
Powered by Kunena Forum