oxygen Posted April 5, 2014 Share Posted April 5, 2014 hi, I am installing a fresh PS 1.6. On the BO, we are able to disable the display of Add To Cart when a product has attribute (Preference>Products>Product Page). Is there a way to do the same for product that has customization fields to fill in? At this moment, if a product has customization text fields, clicking Add To Cart gives no response. Any help is appreciated. Thank you. With regards, Link to comment Share on other sites More sharing options...
NemoPS Posted April 5, 2014 Share Posted April 5, 2014 I believe you need to edit the template to achieve this, although there is a $product.customizable switch in the product list. You can try with {if $product.customizable !== 1} wrapping the add to cart button. You have to do this in the product page as well but with $product->customizable Link to comment Share on other sites More sharing options...
vekia Posted April 6, 2014 Share Posted April 6, 2014 hello what theme you use? default-bootstrap or some non default solution? Link to comment Share on other sites More sharing options...
oxygen Posted April 7, 2014 Author Share Posted April 7, 2014 Thanks Nemo1 and Vekia. I am using default-bootstrap. Here is the scenario. When a product has customisation text fields, clicking Add To Cart on the product listing page will work. When the customization text fields are required fields, clicking Add To Cart button (on product listing page) gives no response. I would prefer to go to the product page or at least a message pop-up to inform the customer that customization fields are required. Thank you for your help. regards, Link to comment Share on other sites More sharing options...
NemoPS Posted April 7, 2014 Share Posted April 7, 2014 Its a prestabug. The ajax call returns errors: [Please fill in all of the required fields, and then save your customizations.] 0: "Please fill in all of the required fields, and then save your customizations." But nothing is displayed. Try changing ajax-cart.js (theme folder!!) from about line 342, where it checks hasErrors: else { alert(jsonData.errors[0]) $(callerElement).removeProp('disabled'); } Link to comment Share on other sites More sharing options...
oxygen Posted April 7, 2014 Author Share Posted April 7, 2014 (edited) Thanks Nemo1. It is now displaying the error message. However, it just looks odd as it does not lead the customer to the Product Page. Instead of displaying the error message, how do I lead the customer to the Product Page so that the customer can fill up the required customization text fields? In other words, for product that has customization with required fields, the Add To Cart and More buttons should behave the same by leading the customer to the Product Page. Thank you once again for your help. regards, Edited April 7, 2014 by oxygen (see edit history) Link to comment Share on other sites More sharing options...
NemoPS Posted April 7, 2014 Share Posted April 7, 2014 I can't remember if js has a specific product redirection function, but you can try with window.location.href = baseUri + 'index.php?controller=product&id_product='+ idProduct Link to comment Share on other sites More sharing options...
oxygen Posted April 7, 2014 Author Share Posted April 7, 2014 Thanks Nemo1! It works. For anyone who would like to fix this problem, the js file to change is: themes/default-boostrap/js/modules/blockcart/ajax-cart.js After line 343: $(callerElement).removeProp('disabled'); Add this: window.location.href = baseUri + 'index.php?controller=product&id_product='+ idProduct; Thank you once again. regards Link to comment Share on other sites More sharing options...
NemoPS Posted April 7, 2014 Share Posted April 7, 2014 Glad to know it works! Just be aware that, this way, every time you get an add to cart error (known error) you will be redirected to the product page Thus, you might want to add a further check to make sure it's the customization one 1 Link to comment Share on other sites More sharing options...
djmila Posted April 9, 2014 Share Posted April 9, 2014 Please exactly where to insert a row? thank you Link to comment Share on other sites More sharing options...
oxygen Posted April 10, 2014 Author Share Posted April 10, 2014 hi, The file to change is: themes/default-bootstrap/js/modules/blockcart/ajax-cart.js Right below line 343: $(callerElement).removeProp('disabled'); Add this: window.location.href = baseUri + 'index.php?controller=product&id_product='+ idProduct; Link to comment Share on other sites More sharing options...
Cornerstonegifts Posted September 15, 2014 Share Posted September 15, 2014 i have the same problem after upgrading to 1.6. I went to change the code as instructed in the post but i am unable to find $(callerElement).removeProp('disabled'); on line 343. but i see the same code in different line. i have attached ajax file, can anyone please help me out where to change the code exactly and it will be greatly appreciate /** 2007-2014 PrestaShop** NOTICE OF LICENSE** This source file is subject to the Academic Free License (AFL 3.0)* that is bundled with this package in the file LICENSE.txt.* It is also available through the world-wide-web at this URL:* http://opensource.org/licenses/afl-3.0.php* If you did not receive a copy of the license and are unable to* obtain it through the world-wide-web, please send an email* to [email protected] so we can send you a copy immediately.** DISCLAIMER** Do not edit or add to this file if you wish to upgrade PrestaShop to newer* versions in the future. If you wish to customize PrestaShop for your* needs please refer to http://www.prestashop.com for more information.** @author PrestaShop SA <[email protected]>* @copyright 2007-2014 PrestaShop SA* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)* International Registered Trademark & Property of PrestaShop SA*/$(document).ready(function(){ ajaxCart.overrideButtonsInThePage(); $(document).on('click', '.block_cart_collapse', function(e){ e.preventDefault(); ajaxCart.collapse(); }); $(document).on('click', '.block_cart_expand', function(e){ e.preventDefault(); ajaxCart.expand(); }); var cart_qty = 0; var current_timestamp = parseInt(new Date().getTime() / 1000); if (typeof $('.ajax_cart_quantity').html() == 'undefined' || (typeof generated_date != 'undefined' && generated_date != null && (parseInt(generated_date) + 30) < current_timestamp)) ajaxCart.refresh(); else cart_qty = parseInt($('.ajax_cart_quantity').html()); /* roll over cart */ var cart_block = new HoverWatcher('#header .cart_block'); var shopping_cart = new HoverWatcher('#header .shopping_cart'); if ('ontouchstart' in document.documentElement) { $('.shopping_cart > a:first').on('click', function(e){ e.preventDefault(); }); } $(document).on('touchstart', '#header .shopping_cart a:first', function(){ if ($(this).next('.cart_block:visible').length) $("#header .cart_block").stop(true, true).slideUp(450); else $("#header .cart_block").stop(true, true).slideDown(450); e.preventDefault(); e.stopPropagation(); }); $("#header .shopping_cart a:first").hover( function(){ if (ajaxCart.nb_total_products > 0 || cart_qty > 0) $("#header .cart_block").stop(true, true).slideDown(450); }, function(){ setTimeout(function(){ if (!shopping_cart.isHoveringOver() && !cart_block.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); }, 200); } ); $("#header .cart_block").hover( function(){ }, function(){ setTimeout(function(){ if (!shopping_cart.isHoveringOver()) $("#header .cart_block").stop(true, true).slideUp(450); }, 200); } ); $(document).on('click', '.delete_voucher', function(e){ e.preventDefault(); $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, async: true, cache: false, url:$(this).attr('href') + '?rand=' + new Date().getTime() }); $(this).parent().parent().remove(); if ($('body').attr('id') == 'order' || $('body').attr('id') == 'order-opc') { if (typeof(updateAddressSelection) != 'undefined') updateAddressSelection(); else location.reload(); } }); $(document).on('click', '#cart_navigation input', function(e){ $(this).prop('disabled', 'disabled').addClass('disabled'); $(this).closest("form").get(0).submit(); }); $(document).on('click', '#layer_cart .cross, #layer_cart .continue, .layer_cart_overlay', function(e){ e.preventDefault(); $('.layer_cart_overlay').hide(); $('#layer_cart').fadeOut('fast'); }); $('#columns #layer_cart, #columns .layer_cart_overlay').detach().prependTo('#columns');});//JS Object : update the cart by ajax actionsvar ajaxCart = { nb_total_products: 0, //override every button in the page in relation to the cart overrideButtonsInThePage : function(){ //for every 'add' buttons... $(document).on('click', '.ajax_add_to_cart_button', function(e){ e.preventDefault(); var idProduct = $(this).data('id-product'); if ($(this).prop('disabled') != 'disabled') ajaxCart.add(idProduct, null, false, this); }); //for product page 'add' button... $(document).on('click', '#add_to_cart button', function(e){ e.preventDefault(); ajaxCart.add($('#product_page_product_id').val(), $('#idCombination').val(), true, null, $('#quantity_wanted').val(), null); }); //for 'delete' buttons in the cart block... $(document).on('click', '.cart_block_list .ajax_cart_block_remove_link', function(e){ e.preventDefault(); // Customized product management var customizationId = 0; var productId = 0; var productAttributeId = 0; var customizableProductDiv = $($(this).parent().parent()).find("div[data-id^=deleteCustomizableProduct_]"); var idAddressDelivery = false; if (customizableProductDiv && $(customizableProductDiv).length) { var ids = customizableProductDiv.data('id').split('_'); if (typeof(ids[1]) != 'undefined') { customizationId = parseInt(ids[1]); productId = parseInt(ids[2]); if (typeof(ids[3]) != 'undefined') productAttributeId = parseInt(ids[3]); if (typeof(ids[4]) != 'undefined') idAddressDelivery = parseInt(ids[4]); } } // Common product management if (!customizationId) { //retrieve idProduct and idCombination from the displayed product in the block cart var firstCut = $(this).parent().parent().data('id').replace('cart_block_product_', ''); firstCut = firstCut.replace('deleteCustomizableProduct_', ''); ids = firstCut.split('_'); productId = parseInt(ids[0]); if (typeof(ids[1]) != 'undefined') productAttributeId = parseInt(ids[1]); if (typeof(ids[2]) != 'undefined') idAddressDelivery = parseInt(ids[2]); } // Removing product from the cart ajaxCart.remove(productId, productAttributeId, customizationId, idAddressDelivery); }); }, // try to expand the cart expand : function(){ if ($('.cart_block_list').hasClass('collapsed')) { $('.cart_block_list.collapsed').slideDown({ duration: 450, complete: function(){ $(this).addClass('expanded').removeClass('collapsed'); } }); // save the expand statut in the user cookie $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date().getTime(), async: true, cache: false, data: 'ajax_blockcart_display=expand', complete: function(){ $('.block_cart_expand').fadeOut('fast', function(){ $('.block_cart_collapse').fadeIn('fast'); }); } }); } }, // try to collapse the cart collapse : function(){ if ($('.cart_block_list').hasClass('expanded')) { $('.cart_block_list.expanded').slideUp('slow', function(){ $(this).addClass('collapsed').removeClass('expanded'); }); // save the expand statut in the user cookie $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseDir + 'modules/blockcart/blockcart-set-collapse.php' + '?rand=' + new Date().getTime(), async: true, cache: false, data: 'ajax_blockcart_display=collapse' + '&rand=' + new Date().getTime(), complete: function(){ $('.block_cart_collapse').fadeOut('fast', function(){ $('.block_cart_expand').fadeIn('fast'); }); } }); } }, // Fix display when using back and previous browsers buttons refresh : function(){ $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&ajax=true&token=' + static_token, success: function(jsonData) { ajaxCart.updateCart(jsonData); } }); }, // Update the cart information updateCartInformation : function (jsonData, addedFromProductPage){ ajaxCart.updateCart(jsonData); //reactive the button when adding has finished if (addedFromProductPage) { $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); if (!jsonData.hasError || jsonData.hasError == false) $('#add_to_cart button').addClass('added'); else $('#add_to_cart button').removeClass('added'); } else $('.ajax_add_to_cart_button').removeProp('disabled'); }, // close fancybox updateFancyBox : function (){}, // add a product in the cart via ajax add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist){ if (addedFromProductPage && !checkCustomizations()) { if (contentOnly) { var productUrl = window.document.location.href + ''; var data = productUrl.replace('content_only=1', ''); window.parent.document.location.href = data; return; } if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + fieldRequired + '</p>' } ], { padding: 0 }); else alert(fieldRequired); return; } emptyCustomizations(); //disabled the button when adding to not double add if user double click if (addedFromProductPage) { $('#add_to_cart button').prop('disabled', 'disabled').addClass('disabled'); $('.filled').removeClass('filled'); } else $(callerElement).prop('disabled', 'disabled'); if ($('.cart_block_list').hasClass('collapsed')) this.expand(); //send the ajax request to the server $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): ''), success: function(jsonData,textStatus,jqXHR) { // add appliance to whishlist module if (whishlist && !jsonData.errors) WishlistAddProductCart(whishlist[0], idProduct, idCombination, whishlist[1]); if (!jsonData.hasError) { if (contentOnly) window.parent.ajaxCart.updateCartInformation(jsonData, addedFromProductPage); else ajaxCart.updateCartInformation(jsonData, addedFromProductPage); if (jsonData.crossSelling) $('.crossseling').html(jsonData.crossSelling); if (idCombination) $(jsonData.products).each(function(){ if (this.id != undefined && this.id == parseInt(idProduct) && this.idCombination == parseInt(idCombination)) if (contentOnly) window.parent.ajaxCart.updateLayer(this); else ajaxCart.updateLayer(this); }); else $(jsonData.products).each(function(){ if (this.id != undefined && this.id == parseInt(idProduct)) if (contentOnly) window.parent.ajaxCart.updateLayer(this); else ajaxCart.updateLayer(this); }); if (contentOnly) parent.$.fancybox.close(); } else { if (contentOnly) window.parent.ajaxCart.updateCart(jsonData); else ajaxCart.updateCart(jsonData); if (addedFromProductPage) $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); else $(callerElement).removeProp('disabled'); } }, error: function(XMLHttpRequest, textStatus, errorThrown) { var error = "Impossible to add the product to the cart.<br/>textStatus: '" + textStatus + "'<br/>errorThrown: '" + errorThrown + "'<br/>responseText:<br/>" + XMLHttpRequest.responseText; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + error + '</p>' }], { padding: 0 }); else alert(error); //reactive the button when adding has finished if (addedFromProductPage) $('#add_to_cart button').removeProp('disabled').removeClass('disabled'); else $(callerElement).removeProp('disabled'); } }); }, //remove a product from the cart via ajax remove : function(idProduct, idCombination, customizationId, idAddressDelivery){ //send the ajax request to the server $.ajax({ type: 'POST', headers: { "cache-control": "no-cache" }, url: baseUri + '?rand=' + new Date().getTime(), async: true, cache: false, dataType : "json", data: 'controller=cart&delete=1&id_product=' + idProduct + '&ipa=' + ((idCombination != null && parseInt(idCombination)) ? idCombination : '') + ((customizationId && customizationId != null) ? '&id_customization=' + customizationId : '') + '&id_address_delivery=' + idAddressDelivery + '&token=' + static_token + '&ajax=true', success: function(jsonData) { ajaxCart.updateCart(jsonData); if ($('body').attr('id') == 'order' || $('body').attr('id') == 'order-opc') deleteProductFromSummary(idProduct+'_'+idCombination+'_'+customizationId+'_'+idAddressDelivery); }, error: function() { var error = 'ERROR: unable to delete the product'; if (!!$.prototype.fancybox) { $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: error } ], { padding: 0 }); } else alert(error); } }); }, //hide the products displayed in the page but no more in the json data hideOldProducts : function(jsonData){ //delete an eventually removed product of the displayed cart (only if cart is not empty!) if ($('.cart_block_list:first dl.products').length > 0) { var removedProductId = null; var removedProductData = null; var removedProductDomId = null; //look for a product to delete... $('.cart_block_list:first dl.products dt').each(function(){ //retrieve idProduct and idCombination from the displayed product in the block cart var domIdProduct = $(this).data('id'); var firstCut = domIdProduct.replace('cart_block_product_', ''); var ids = firstCut.split('_'); //try to know if the current product is still in the new list var stayInTheCart = false; for (aProduct in jsonData.products) { //we've called the variable aProduct because IE6 bug if this variable is called product //if product has attributes if (jsonData.products[aProduct]['id'] == ids[0] && (!ids[1] || jsonData.products[aProduct]['idCombination'] == ids[1])) { stayInTheCart = true; // update the product customization display (when the product is still in the cart) ajaxCart.hideOldProductCustomizations(jsonData.products[aProduct], domIdProduct); } } //remove product if it's no more in the cart if (!stayInTheCart) { removedProductId = $(this).data('id'); if (removedProductId != null) { var firstCut = removedProductId.replace('cart_block_product_', ''); var ids = firstCut.split('_'); $('dt[data-id=' + removedProductId + ']').addClass('strike').fadeTo('slow', 0, function(){ $(this).slideUp('slow', function(){ $(this).remove(); // If the cart is now empty, show the 'no product in the cart' message and close detail if($('.cart_block:first dl.products dt').length == 0) { $("#header .cart_block").stop(true, true).slideUp(200); $('.cart_block_no_products:hidden').slideDown(450); $('.cart_block dl.products').remove(); } }); }); $('dd[data-id="cart_block_combination_of_' + ids[0] + (ids[1] ? '_'+ids[1] : '') + (ids[2] ? '_'+ids[2] : '') + '"]').fadeTo('fast', 0, function(){ $(this).slideUp('fast', function(){ $(this).remove(); }); }); } } }); } }, hideOldProductCustomizations : function (product, domIdProduct){ var customizationList = $('ul[data-id=customization_' + product['id] + '_' + product['idCombination'] + '"]'); if(customizationList.length > 0) { $(customizationList).find("li").each(function(){ $(this).find("div").each(function(){ var customizationDiv = $(this).data('id'); var tmp = customizationDiv.replace('deleteCustomizableProduct_', ''); var ids = tmp.split('_'); if ((parseInt(product.idCombination) == parseInt(ids[2])) && !ajaxCart.doesCustomizationStillExist(product, ids[0])) $('div[data-id=' + customizationDiv + ']').parent().addClass('strike').fadeTo('slow', 0, function(){ $(this).slideUp('slow'); $(this).remove(); }); }); }); } var removeLinks = $('.deleteCustomizableProduct[data-id=' + domIdProduct + ']').find('.ajax_cart_block_remove_link'); if (!product.hasCustomizedDatas && !removeLinks.length) $('div[data-id=' + domIdProduct + ']' + ' span.remove_link').html('<a class="ajax_cart_block_remove_link" rel="nofollow" href="' + baseUri + '?controller=cart&delete=1&id_product=' + product['id'] + '&ipa=' + product['idCombination'] + '&token=' + static_token + '"> </a>'); if (product.is_gift) $('div[data-id=' + domIdProduct + ']' + ' span.remove_link').html(''); }, doesCustomizationStillExist : function (product, customizationId){ var exists = false; $(product.customizedDatas).each(function(){ if (this.customizationId == customizationId) { exists = true; // This return does not mean that we found nothing but simply break the loop return false; } }); return (exists); }, //refresh display of vouchers (needed for vouchers in % of the total) refreshVouchers : function (jsonData){ if (typeof(jsonData.discounts) == 'undefined' || jsonData.discounts.length == 0) $('.vouchers').hide(); else { $('.vouchers tbody').html(''); for (i=0;i<jsonData.discounts.length;i++) { if (parseFloat(jsonData.discounts.price_float) > 0) { var delete_link = ''; if (jsonData.discounts.code.length) delete_link = '<a class="delete_voucher" href="'+jsonData.discounts.link+'" title="'+delete_txt+'"><i class="icon-remove-sign"></i></a>'; $('.vouchers tbody').append($( '<tr class="bloc_cart_voucher" data-id="bloc_cart_voucher_'+jsonData.discounts.id+'">' +' <td class="quantity">1x</td>' +' <td class="name" title="'+jsonData.discounts.description+'">'+jsonData.discounts.name+'</td>' +' <td class="price">-'+jsonData.discounts.price+'</td>' +' <td class="delete">' + delete_link + '</td>' +'</tr>' )); } } $('.vouchers').show(); } }, // Update product quantity updateProductQuantity : function (product, quantity){ $('dt[data-id=cart_block_product_' + product.id + '_' + (product.idCombination ? product.idCombination : '0')+ '_' + (product.idAddressDelivery ? product.idAddressDelivery : '0') + '] .quantity').fadeTo('fast', 0, function(){ $(this).text(quantity); $(this).fadeTo('fast', 1, function(){ $(this).fadeTo('fast', 0, function(){ $(this).fadeTo('fast', 1, function(){ $(this).fadeTo('fast', 0, function(){ $(this).fadeTo('fast', 1); }); }); }); }); }); }, //display the products witch are in json data but not already displayed displayNewProducts : function(jsonData){ //add every new products or update displaying of every updated products $(jsonData.products).each(function(){ //fix ie6 bug (one more item 'undefined' in IE6) if (this.id != undefined) { //create a container for listing the products and hide the 'no product in the cart' message (only if the cart was empty) if ($('.cart_block:first dl.products').length == 0) { $('.cart_block_no_products').before('<dl class="products"></dl>'); $('.cart_block_no_products').hide(); } //if product is not in the displayed cart, add a new product's line var domIdProduct = this.id + '_' + (this.idCombination ? this.idCombination : '0') + '_' + (this.idAddressDelivery ? this.idAddressDelivery : '0'); var domIdProductAttribute = this.id + '_' + (this.idCombination ? this.idCombination : '0'); if ($('dt[data-id=cart_block_product_' + domIdProduct + ']').length == 0) { var productId = parseInt(this.id); var productAttributeId = (this.hasAttributes ? parseInt(this.attributes) : 0); var content = '<dt class="unvisible" data-id="cart_block_product_' + domIdProduct + '">'; var name = $.trim($('<span />').html(this.name).text()); name = (name.length > 12 ? name.substring(0, 10) + '...' : name); content += '<a class="cart-images" href="' + this.link + '" title="' + name + '"><img src="' + this.image_cart + '" alt="' + this.name +'"></a>'; content += '<div class="cart-info"><div class="product-name">' + '<span class="quantity-formated"><span class="quantity">' + this.quantity + '</span> x </span><a href="' + this.link + '" title="' + this.name + '" class="cart_block_product_name">' + name + '</a></div>'; if (this.hasAttributes) content += '<div class="product-atributes"><a href="' + this.link + '" title="' + this.name + '">' + this.attributes + '</a></div>'; if (typeof(freeProductTranslation) != 'undefined') content += '<span class="price">' + (parseFloat(this.price_float) > 0 ? this.priceByLine : freeProductTranslation) + '</span></div>'; if (typeof(this.is_gift) == 'undefined' || this.is_gift == 0) content += '<span class="remove_link"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&token=' + static_token + (this.hasAttributes ? '&ipa=' + parseInt(this.idCombination) : '') + '"> </a></span>'; else content += '<span class="remove_link"></span>'; content += '</dt>'; if (this.hasAttributes) content += '<dd data-id="cart_block_combination_of_' + domIdProduct + '" class="unvisible">'; if (this.hasCustomizedDatas) content += ajaxCart.displayNewCustomizedDatas(this); if (this.hasAttributes) content += '</dd>'; $('.cart_block dl.products').append(content); } //else update the product's line else { var jsonProduct = this; if($.trim($('dt[data-id=cart_block_product_' + domIdProduct + '] .quantity').html()) != jsonProduct.quantity || $.trim($('dt[data-id=cart_block_product_' + domIdProduct + '] .price').html()) != jsonProduct.priceByLine) { // Usual product if (!this.is_gift) $('dt[data-id=cart_block_product_' + domIdProduct + '] .price').text(jsonProduct.priceByLine); else $('dt[data-id=cart_block_product_' + domIdProduct + '] .price').html(freeProductTranslation); ajaxCart.updateProductQuantity(jsonProduct, jsonProduct.quantity); // Customized product if (jsonProduct.hasCustomizedDatas) { customizationFormatedDatas = ajaxCart.displayNewCustomizedDatas(jsonProduct); if (!$('ul[data-id=customization_' + domIdProductAttribute + ']').length) { if (jsonProduct.hasAttributes) $('dd[data-id=cart_block_combination_of_' + domIdProduct + ']').append(customizationFormatedDatas); else $('.cart_block dl.products').append(customizationFormatedDatas); } else { $('ul[data-id=customization_' + domIdProductAttribute + ']').html(''); $('ul[data-id=customization_' + domIdProductAttribute + ']').append(customizationFormatedDatas); } } } } $('.cart_block dl.products .unvisible').slideDown(450).removeClass('unvisible'); var removeLinks = $('dt[data-id=cart_block_product_' + domIdProduct + ']').find('a.ajax_cart_block_remove_link'); if (this.hasCustomizedDatas && removeLinks.length) $(removeLinks).each(function(){ $(this).remove(); }); } }); }, displayNewCustomizedDatas : function(product){ var content = ''; var productId = parseInt(product.id); var productAttributeId = typeof(product.idCombination) == 'undefined' ? 0 : parseInt(product.idCombination); var hasAlreadyCustomizations = $('ul[data-id=customization_' + productId + '_' + productAttributeId + ']').length; if (!hasAlreadyCustomizations) { if (!product.hasAttributes) content += '<dd data-id="cart_block_combination_of_' + productId + '" class="unvisible">'; if ($('ul[data-id=customization_' + productId + '_' + productAttributeId + ']').val() == undefined) content += '<ul class="cart_block_customizations" data-id="customization_' + productId + '_' + productAttributeId + '">'; } $(product.customizedDatas).each(function(){ var done = 0; customizationId = parseInt(this.customizationId); productAttributeId = typeof(product.idCombination) == 'undefined' ? 0 : parseInt(product.idCombination); content += '<li name="customization"><div class="deleteCustomizableProduct" data-id="deleteCustomizableProduct_' + customizationId + '_' + productId + '_' + (productAttributeId ? productAttributeId : '0') + '"><a rel="nofollow" class="ajax_cart_block_remove_link" href="' + baseUri + '?controller=cart&delete=1&id_product=' + productId + '&ipa=' + productAttributeId + '&id_customization=' + customizationId + '&token=' + static_token + '"></a></div>'; // Give to the customized product the first textfield value as name $(this.datas).each(function(){ if (this['type'] == CUSTOMIZE_TEXTFIELD) { $(this.datas).each(function(){ if (this['index'] == 0) { content += ' ' + this.truncatedValue.replace(/<br \/>/g, ' '); done = 1; return false; } }) } }); // If the customized product did not have any textfield, it will have the customizationId as name if (!done) content += customizationIdMessage + customizationId; if (!hasAlreadyCustomizations) content += '</li>'; // Field cleaning if (customizationId) { $('#uploadable_files li div.customizationUploadBrowse img').remove(); $('#text_fields input').attr('value', ''); } }); if (!hasAlreadyCustomizations) { content += '</ul>'; if (!product.hasAttributes) content += '</dd>'; } return (content); }, updateLayer : function(product){ $('#layer_cart_product_title').text(product.name); $('#layer_cart_product_attributes').text(''); if (product.hasAttributes && product.hasAttributes == true) $('#layer_cart_product_attributes').html(product.attributes); $('#layer_cart_product_price').text(product.price); $('#layer_cart_product_quantity').text(product.quantity); $('.layer_cart_img').html('<img class="layer_cart_img img-responsive" src="' + product.image + '" alt="' + product.name + '" title="' + product.name + '" />'); var n = parseInt($(window).scrollTop()) + 'px'; $('.layer_cart_overlay').css('width','100%'); $('.layer_cart_overlay').css('height','100%'); $('.layer_cart_overlay').show(); $('#layer_cart').css({'top': n}).fadeIn('fast'); crossselling_serialScroll(); }, //genarally update the display of the cart updateCart : function(jsonData){ //user errors display if (jsonData.hasError) { var errors = ''; for (error in jsonData.errors) //IE6 bug fix if (error != 'indexOf') errors += $('<div />').html(jsonData.errors[error]).text() + "\n"; if (!!$.prototype.fancybox) $.fancybox.open([ { type: 'inline', autoScale: true, minHeight: 30, content: '<p class="fancybox-error">' + errors + '</p>' } ], { padding: 0 }); else alert(errors); } else { ajaxCart.updateCartEverywhere(jsonData); ajaxCart.hideOldProducts(jsonData); ajaxCart.displayNewProducts(jsonData); ajaxCart.refreshVouchers(jsonData); //update 'first' and 'last' item classes $('.cart_block .products dt').removeClass('first_item').removeClass('last_item').removeClass('item'); $('.cart_block .products dt:first').addClass('first_item'); $('.cart_block .products dt:not(:first,:last)').addClass('item'); $('.cart_block .products dt:last').addClass('last_item'); } }, //update general cart informations everywhere in the page updateCartEverywhere : function(jsonData){ $('.ajax_cart_total').text($.trim(jsonData.productTotal)); if (parseFloat(jsonData.shippingCostFloat) > 0) $('.ajax_cart_shipping_cost').text(jsonData.shippingCost); else if (typeof(freeShippingTranslation) != 'undefined') $('.ajax_cart_shipping_cost').html(freeShippingTranslation); $('.ajax_cart_tax_cost').text(jsonData.taxCost); $('.cart_block_wrapping_cost').text(jsonData.wrappingCost); $('.ajax_block_cart_total').text(jsonData.total); $('.ajax_block_products_total').text(jsonData.productTotal); $('.ajax_total_price_wt').text(jsonData.total_price_wt); if (parseFloat(jsonData.freeShippingFloat) > 0) { $('.ajax_cart_free_shipping').html(jsonData.freeShipping); $('.freeshipping').fadeIn(0); } else if (parseFloat(jsonData.freeShippingFloat) == 0) $('.freeshipping').fadeOut(0); this.nb_total_products = jsonData.nbTotalProducts; if (parseInt(jsonData.nbTotalProducts) > 0) { $('.ajax_cart_no_product').hide(); $('.ajax_cart_quantity').text(jsonData.nbTotalProducts); $('.ajax_cart_quantity').fadeIn('slow'); $('.ajax_cart_total').fadeIn('slow'); if (parseInt(jsonData.nbTotalProducts) > 1) { $('.ajax_cart_product_txt').each( function (){ $(this).hide(); }); $('.ajax_cart_product_txt_s').each( function (){ $(this).show(); }); } else { $('.ajax_cart_product_txt').each( function (){ $(this).show(); }); $('.ajax_cart_product_txt_s').each( function (){ $(this).hide(); }); } } else { $('.ajax_cart_quantity, .ajax_cart_product_txt_s, .ajax_cart_product_txt, .ajax_cart_total').each(function(){ $(this).hide(); }); $('.ajax_cart_no_product').show('slow'); } }};function HoverWatcher(selector){ this.hovering = false; var self = this; this.isHoveringOver = function(){ return self.hovering; } $(selector).hover(function(){ self.hovering = true; }, function(){ self.hovering = false; })}function crossselling_serialScroll(){ if (!!$.prototype.bxSlider) $('#blockcart_caroucel').bxSlider({ minSlides: 2, maxSlides: 4, slideWidth: 178, slideMargin: 20, moveSlides: 1, infiniteLoop: false, hideControlOnEnd: true, pager: false });} hi, The file to change is: themes/default-bootstrap/js/modules/blockcart/ajax-cart.js Right below line 343: $(callerElement).removeProp('disabled'); Add this: window.location.href = baseUri + 'index.php?controller=product&id_product='+ idProduct; Link to comment Share on other sites More sharing options...
Recommended Posts