I am trying to add a little line in my Shopify product page where it will show the customer the amount currently in his/her cart, and automatically show whether or not the customer is eligible for free shipping, and the amount needed to hit free shipping.
I have managed to do all the above, with one small problem now: when the customer hits add to cart, the line still shows the same thing until the customer refreshes the page. I did a bit of reading and relaised it's because the cart works on something called AJAX.
I am not a programmer or developer, I am just a site owner, and I have very little knowledge of coding. I just google for solutions and copy and paste and modify code to get my desired effect. But this one really has me stumped, so i appreciate if someone can help me out!
Thank you in advance!
Also I apologise if my code looks messy or I sound like I don't know what I'm talking about. I'm really new to this!
<div id="freeship" style="font-weight:bold; padding: 10px;">Your cart total is <span style="color:#f64c3f">{{ cart.total_price | money }}</span>. You qualify for free shipping!</div>
<div id="nofreeship" style="font-weight:bold; padding: 10px;">Your cart total is <span style="color:#f64c3f">{{ cart.total_price | money }}</span>.<br>Spend {{ 2500 | minus: cart.total_price | money }} more to qualify for free shipping!</div>
<script>
!function checkprice() {
var y = "2600" ;
var x = "{{ cart.total_price }}";
if (Number(x) > Number(y)) {
document.getElementById("freeship").style.display = "block";
document.getElementById("nofreeship").style.display = "none";
} else {
document.getElementById("freeship").style.display = "none";
document.getElementById("nofreeship").style.display = "block";
}
} ();
</script>
UPDATE: Ryan, this is what I managed to dig up, I am guessing this is the code that updates the minicart at the top when an item is added to cart?
function checkprice() {
var baseprice = "2500" ;
var carttotal = "{{ cart.total_price }}";
if (Number(carttotal) > Number(baseprice) {
document.getElementById("freeship").style.display = "none";
document.getElementById("nofreeship").style.display = "block";
} else {
document.getElementById("freeship").style.display = "block";
document.getElementById("nofreeship").style.display = "none";
}
};
ProductView.prototype.updateMiniCart = function(cart) {
var i, item, itemProperties, itemText, j, len, miniCartItemsWrap, productPrice, propertiesArray, propertyKeysArray, ref, variant;
miniCartItemsWrap = $(".mini-cart-items-wrap");
miniCartItemsWrap.empty();
if (cart.item_count !== 1) {
itemText = Theme.cartItemsOther;
} else {
itemText = Theme.cartItemsOne;
$(".mini-cart .options").show();
miniCartItemsWrap.find(".no-items").hide();
}
$(".mini-cart-wrap label").html("<span class='item-count'>" + cart.item_count + "</span> " + itemText);
ref = cart.items;
for (j = 0, len = ref.length; j < len; j++) {
item = ref[j];
productPrice = Shopify.formatMoney(item.line_price, Theme.moneyFormat);
variant = item.variant_title ? "<p class='variant'>" + item.variant_title + "</p>" : "";
itemProperties = "";
if (item.properties) {
propertyKeysArray = Object.keys(item.properties);
propertiesArray = _.values(item.properties);
i = 0;
while (i < propertyKeysArray.length) {
if (propertiesArray[i].length) {
itemProperties = itemProperties + ("<p class=\"property\">\n <span class=\"property-label\">" + propertyKeysArray[i] + ":</span>\n <span class=\"property-value\">" + propertiesArray[i] + "</span>\n</p>");
}
i++;
}
}
miniCartItemsWrap.append("<div id=\"item-" + item.variant_id + "\" class=\"item clearfix\">\n <div class=\"image-wrap\">\n <img alt=\"" + item.title + "\" src=\"" + item.image + "\">\n <a class=\"overlay\" href=\"" + item.url + "\"></a>\n </div>\n <div class=\"details\">\n <p class=\"brand\">" + item.vendor + "</p>\n <p class=\"title\"><a href=\"" + item.url + "\">" + item.product_title + "</a><span class=\"quantity\">× <span class=\"count\">" + item.quantity + "</span></span></p>\n <p class=\"price\"><span class=\"money\">" + productPrice + "</span></p>\n " + variant + "\n " + itemProperties + "\n </div>\n</div>");
};checkprice()
if (Theme.currencySwitcher) {
return $(document.body).trigger("switch-currency");
}
};
event handlerto the shopping cart so that it calls this function when an item is added or removed. If you can post the HTML for your shopping cart or any relevant code for adding or removing an item we can help you more. As far as the!functionin the code, this post explains what the programmer was doing (stackoverflow.com/questions/3755606/…) - Ryan Wilsoncheckprice();right before this lineif (Theme.currencySwitcher) { return $(document.body).trigger("switch-currency"); }in your new post. As I'm not sure if the variablecart.total_pricewill be up to date or not at that point, if not, you may need to add tocart.total_priceon the iteration of the for loop to add each item's cost to the total, but theoretically, ifcart.total_priceis up to date at the end of the loop, callingcheckprice()at that point should give you the desired results without having to refresh. - Ryan Wilson