Como adicionar o botão comprar na listagem dos produtos

Há duas formas de adicionar um produto ao carrinho, veja abaixo os detalhes de cada uma delas:

Link para adicionar produto ao carrinho

Uma forma simples de adicionar produtos ao carrinho através de um botão na listagem é utilizando o link para o carrinho, abaixo um exemplo:

 <a href="{{ links.cart_add ~ product.id }}" alt="comprar"> Comprar</a>

Essa forma funcionará apenas para produtos que não possuam variação, caso o produto tenha variação, o link será direcionado para a pagina de produto, onde o cliente poderá seleciona-la.

Geralmente o produto na listagem é montado através do arquivo elements/snippets/product.html.

API para Incluir Produto no Carrinho de Compra

Utilizar essa forma, exige um pouco mais de conhecimento em desenvolvimento web, principalmente em javascript, pois é necessário saber manipular os dados retornados pela API de carrinho.

Inicialmente é necessário adicionar o botão para a exibição no layout, para isso, por exemplo, adicione o código abaixo ao arquivo elements/snippets/product.html

<button type="submit" data-app="product.buy-button" data-product ="{{ product.id }}" >    Comprar </button>

Após isso é necessário adicionar uma ação ao botão comprar, para isso devemos adicionar uma função javascript para enviar o produto ao carrinho, por exemplo:

jQuery('[data-app="product.buy-button"]').on('click', function() {
  var $productId = jQuery(this).attr('data-product');
  var $dataSession = jQuery("html").attr("data-session");
  var self = this;
  jQuery.ajax({
    method: "POST",
    url: "/web_api/cart/",
    contentType: "application/json; charset=utf-8",
    data: '{"Cart":{"session_id":"'+$dataSession+'","product_id":"'+$productId+'","quantity":1}}'
  }).done(function( response, textStatus, jqXHR ) {
    jQuery(self).text("Adicionado!")
   var qtdCart = parseInt(jQuery("[data-cart=amount]").html());
   jQuery("[data-cart=amount]").html(qtdCart + 1);
  }).fail(function( jqXHR, status, errorThrown ){
    var response = jQuery.parseJSON( jqXHR.responseText );
    // Exibe a mensagem de erro (estoque insuficiente, etc)
    alert(response.causes[0])
  });
})

Lembrando que esses exemplos funcionam apenas para produtos que não possuam variação.

No primeiro exemplo, caso o produto tenha variação, o link será direcionado para a pagina de produto, onde o cliente poderá seleciona-la. No segundo exemplo será exibido um alerta informando que a variação precisa ser selecionada.

Caso o queira um exemplo mais completo, verificar o artigo Adicionar ao carrinho sem sair da página

Last updated