how "Add To Cart" looks on a Category page
The following code in "templates\components\products\card.html" leads customer to his Cart after he clicked on a "Add to Cart" button on chosen product on Category Page.
{{#if add_to_cart_url }}
<a href="{{add_to_cart_url}}"
class="button button--small
card-figcaption-button">
{{lang 'products.add_to_cart'}}</a>
{{/if}}
"{{add_to_cart_url}}" == http://mystore.com/cart.php?action=add&product_id=15865.
How to NOT redirect customer to his Cart? How to add item to a cart and stay on the same page?
For example on Product page, after customer add product, customer stays on the same page, and script opens modal confirmation window.
<!-- from templates\components\products\product-view.html -->
<form class="form" method="post" action="{{product.cart_url}}" enctype="multipart/form-data"
data-cart-item-add>
<input type="hidden" name="action" value="add">
<input type="hidden" name="product_id" value="{{product.id}}"/>
<div class="form-action">
<input id="form-action-addToCart"
data-wait-message=
"{{lang 'products.adding_to_cart'}}"
class="button button--primary" type="submit"
value="{{#if product.pre_order}}
{{lang 'products.pre_order'}}
{{else}}
{{lang 'products.add_to_cart'}}
{{/if}}">
</div>
This Product page code works based on this script: assets\js\bundle.js
Product.prototype.addProductToCart = function addProductToCart(event, form) {
var _this4 = this;
var $addToCartBtn = (0, _jquery2.default)('#form-action-addToCart', (0, _jquery2.default)(event.target));
var originalBtnVal = $addToCartBtn.val();
var waitMessage = $addToCartBtn.data('waitMessage');
// Do not do AJAX if browser doesn't support FormData
if (window.FormData === undefined) {
return;
}
// Prevent default
event.preventDefault();
$addToCartBtn.val(waitMessage).prop('disabled', true);
// Add item to cart
_stencilUtils2.default.api.cart.itemAdd(new FormData(form), function (err, response) {
var errorMessage = err || response.data.error;
$addToCartBtn.val(originalBtnVal).prop('disabled', false);
// Guard statement
if (errorMessage) {
// Strip the HTML from the error message
var tmp = document.createElement('DIV');
tmp.innerHTML = errorMessage;
alert(tmp.textContent || tmp.innerText);
return;
}
// Open preview modal and update content
previewModal.open();
_this4.updateCartContent(previewModal, response.data.cart_item.hash);
});
};
UPDATE: This is similar: Adding item to cart with BigCommerce Stencil
He was able to use utils.api.cart.itemAdd() I can't make it workable.
One of the hook examples in Stencil: https://stencil.bigcommerce.com/docs/hook-example-2-cart-dialog
- I need to add product to a cart from Category Page (templates\components\products\card.html)
- Prevent the page from redirecting.
- Update Cart content. All this does addProductToCart(event, form) function. How to use it?
Just prevent page from redirecting not enough, it gives issues with updating Cart Content and quantity.
Difference between adding products to a cart on card.html(category page) and product-view.html(product page) also in options and quantity. On card.html adding happens by link {{add_to_cart_url}}. On product-view.html it happens by form submitting and hook from addProductToCart(event, form).