Prabhakaran A
Prabhakaran A

Reputation: 63

How work add to cart function from custom module in prestashop 1.7

I add the product to cart from my custom module by using the following code but it's not working. Please any body help to add product to cart.

// JS file

 $.ajax({
    url : url+'&action=savecustomdataAction',
    type : "POST",
    data : { customdata : customdata, qty : 1, pid : 9 },

    success : function(response) {
      if(response.message == true) {
        $('#addtocart_form').submit();
      }
    }
  });

// My tpl script

    <script>
     var url ="{url entity='module' name='appcustomizer' controller='ajaxfunc' params = []}";
    </script>

// The following code are in my controller file

     public function displayAjaxsavecustomdataAction() {        
      $customData = Tools::getValue('customdata');
      $idProduct = Tools::getValue('pid'); // for me it's always one
      $qty=Tools::getValue('qty'); // always add one item
      $attribute = 1;

        global $cookie;
        $CustomOptions='';
        $context = Context::getContext();
        $temp = $this->context->cookie->__set('customoptions',$customData);
        $cookie->write();

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

      // get product to add into cart
        $productToAdd = new Product((int)($idProduct), true, (int)($this->context->cookie->id_lang));

        $cart = $this->context->cart;
        $updateQuantity = $cart->updateQty((int)($qty), (int)($idProduct),(int)($attribute),$customData, false);

        $cart->update();
       header('Content-Type: application/json');
       die(Tools::jsonEncode(['message' => true]));
      }

Upvotes: 1

Views: 3563

Answers (1)

Prabhakaran A
Prabhakaran A

Reputation: 63

Use the below code to add to cart from your custom module. It's working

My Javascript file

var pid = $('#product_id').val();
$.ajax({
  url : url+'&action=savecustomdataAction',
  type : "POST",
  data : { customdata : customdata, qty : 1, pid : pid },

  success : function(response) {
    if(response.message == true) {
      $('#addtocart_form').submit();
    }
  }
});

My .tpl file

<script>
  var url ="{url entity='module' name='appcustomizer' controller='ajaxfunc' params = []}";
</script>
<form name="addtocart" id="addtocart_form" method="POST" action="{$urls.pages.cart}">
  <input type="hidden" name="id_product" id="product_id" value="{Tools::getValue('pid')}" />
  <input type="hidden" name="token" value="{$static_token}">

   // Your Code Here...

<input type="submit" id="addtocart" class="cart-btn" value="Add To Cart" /> 

My Controller File

 public function displayAjaxsavecustomdataAction() {        
  $customData = Tools::getValue('customdata');
  $idProduct = Tools::getValue('pid'); // for me it's always one
  $qty=Tools::getValue('qty'); // always add one item
  $attribute = 74; //enter the id_product_attribute

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

  // get product to add into cart
    $productToAdd = new Product((int)($idProduct), true, (int)($this->context->cookie->id_lang));
    $cart->update();
    $cart = $this->context->cart;
    $updateQuantity = $cart->updateQty((int)($qty), (int)($idProduct),(int)($attribute), false);

    $cart->update();
   header('Content-Type: application/json');
   die(Tools::jsonEncode(['message' => true]));
  }

Upvotes: 1

Related Questions