Fix popup add to cart

This commit is contained in:
Roman Pyrih
2025-06-24 14:50:47 +02:00
parent 4c71b5d9c2
commit 057b32badb
9 changed files with 515680 additions and 9677 deletions

View File

@@ -1,78 +1,81 @@
/*
* 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 license@prestashop.com 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 <contact@prestashop.com>
* @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
*/
* 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 license@prestashop.com 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 <contact@prestashop.com>
* @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(){
PdProductAttributesList.initFancyboxOnProductImages();
PdProductAttributesList.initTouchSpinOnProductQtyInputs();
PdProductAttributesList.initEventAddToCartToButtons();
$(document).ready(function () {
PdProductAttributesList.initFancyboxOnProductImages()
PdProductAttributesList.initTouchSpinOnProductQtyInputs()
PdProductAttributesList.initEventAddToCartToButtons()
$("#pdproductattributeslist table.table").tablesorter({
theme : 'default',
headerTemplate : '{content} {icon}',
widgets : [ "uitheme", "columns" ],
});
$('#pdproductattributeslist table.table').tablesorter({
theme: 'default',
headerTemplate: '{content} {icon}',
widgets: ['uitheme', 'columns'],
})
prestashop.on('updateProductList', function(params) {
if (typeof(params) !== 'undefined') {
PdProductAttributesList.initFancyboxOnProductImages();
PdProductAttributesList.initTouchSpinOnProductQtyInputs();
PdProductAttributesList.initEventAddToCartToButtons();
prestashop.on('updateProductList', function (params) {
if (typeof params !== 'undefined') {
PdProductAttributesList.initFancyboxOnProductImages()
PdProductAttributesList.initTouchSpinOnProductQtyInputs()
PdProductAttributesList.initEventAddToCartToButtons()
}
});
});
})
})
let PdProductAttributesList = {
initFancyboxOnProductImages(){
initFancyboxOnProductImages() {
if (!!$.prototype.fancybox) {
$('.option_image a.fancybox').fancybox({
'hideOnContentClick': true,
'openEffect' : 'elastic',
'closeEffect' : 'elastic',
'helpers' : {
overlay: {
locked: false
}
}
});
hideOnContentClick: true,
openEffect: 'elastic',
closeEffect: 'elastic',
helpers: {
overlay: {
locked: false,
},
},
})
}
},
initTouchSpinOnProductQtyInputs(){
initTouchSpinOnProductQtyInputs() {
if (!!$.prototype.TouchSpin) {
var max = parseInt($("#pdproductattributeslist input[name='qty']").data('max'));
var max = parseInt(
$("#pdproductattributeslist input[name='qty']").data('max')
)
$("#pdproductattributeslist input[name='qty']").TouchSpin({
min: 0,
max: max,
step: 1,
decimals: 0,
verticalbuttons: true,
verticaldownclass: 'fa fa-minus touchspin-down bootstrap-touchspin-down material-icons touchspin-down',
verticalupclass: 'fa fa-plus touchspin-up bootstrap-touchspin-up material-icons touchspin-up',
verticaldownclass:
'fa fa-minus touchspin-down bootstrap-touchspin-down material-icons touchspin-down',
verticalupclass:
'fa fa-plus touchspin-up bootstrap-touchspin-up material-icons touchspin-up',
buttondown_class: 'btn btn-touchspin js-touchspin ',
buttonup_class: 'btn btn-touchspin js-touchspin '
});
buttonup_class: 'btn btn-touchspin js-touchspin ',
})
$("#pdproductattributeslist_grid input[name='qty']").TouchSpin({
min: 0,
@@ -80,82 +83,145 @@ let PdProductAttributesList = {
step: 1,
decimals: 0,
verticalbuttons: true,
verticaldownclass: 'fa fa-minus touchspin-down bootstrap-touchspin-down material-icons touchspin-down',
verticalupclass: 'fa fa-plus touchspin-up bootstrap-touchspin-up material-icons touchspin-up',
verticaldownclass:
'fa fa-minus touchspin-down bootstrap-touchspin-down material-icons touchspin-down',
verticalupclass:
'fa fa-plus touchspin-up bootstrap-touchspin-up material-icons touchspin-up',
buttondown_class: 'btn btn-touchspin js-touchspin ',
buttonup_class: 'btn btn-touchspin js-touchspin '
});
buttonup_class: 'btn btn-touchspin js-touchspin ',
})
}
},
executeAddProductsToCart(products) {
$.ajax({
type: 'POST',
url: pdproductattributeslist_ajax_link,
dataType: "json",
data: {
'action': 'addProductsToCart',
'products': products,
'secure_key': pdproductattributeslist_secure_key,
'ajax': 1
},
success: function(resp) {
if (resp) {
prestashop.emit('updateCart', {
reason: {
cart: []
},
resp: resp
});
$.ajax({
type: 'POST',
url: pdproductattributeslist_ajax_link,
dataType: 'json',
data: {
action: 'addProductsToCart',
products: products,
secure_key: pdproductattributeslist_secure_key,
ajax: 1,
},
success: function (resp) {
if (resp) {
prestashop.emit('updateCart', {
reason: {
cart: [],
},
resp: resp,
})
Object.entries(resp).forEach(([k, v]) => {
if (v.response) {
if (v.id_product_attribute > 0) {
message_ok = pdproductattributeslist_product + '<b> ' + v.product_name + '</b>, ' + pdproductattributeslist_variant + ' <b> ' + v.combination_name + ' </b>' + pdproductattributeslist_add_ok;
$.growl({ title: pdproductattributeslist_title_ok, message: message_ok, duration: 7000});
} else {
message_ok = pdproductattributeslist_product + '<b> ' + v.product_name + '</b>, ' + pdproductattributeslist_add_ok;
$.growl({ title: pdproductattributeslist_title_ok, message: message_ok, duration: 7000});
}
} else if (v.response == false) {
if (v.id_product_attribute > 0) {
message_error = pdproductattributeslist_product + '<b> ' + v.product_name + '</b>, ' + pdproductattributeslist_variant + ' <b> ' + v.combination_name +'</b>, ' + pdproductattributeslist_max_qty + ' <b>' + v.max_quantity + '</b> ' + pdproductattributeslist_pcs;
$.growl.error({ title: pdproductattributeslist_title_error, message: message_error, duration: 15000});
} else {
message_error = pdproductattributeslist_product + '<b> ' + v.product_name + '</b>, ' + pdproductattributeslist_max_qty + ' <b>' + v.max_quantity + '</b> ' + pdproductattributeslist_pcs;
$.growl.error({ title: pdproductattributeslist_title_error, message: message_error, duration: 15000});
}
}
});
} else {
$.growl.error({ title: pdproductattributeslist_title_error, message: pdproductattributeslist_add_error, duration: 15000});
}
}
});
},
initEventAddToCartToButtons() {
$('body').on('click', 'button.add-to-cart-pdproductattributeslist', function(){
var products_array = [];
var tr_colection = $(this).parent().parent().parent().find('tr');
$(tr_colection).each(function(index) {
elem = $(this).find('td.option_gty');
qty = parseInt(elem.find('input.quantity').val());
if (elem.length > 0 && qty > 0) {
var product = {
'id_product': parseInt(elem.data('id-product')),
'id_product_attribute': parseInt(elem.data('id-product-attribute')),
'quantity': qty,
'id_customization': 0
};
products_array.push(product);
}
});
if (products_array.length > 0) {
PdProductAttributesList.executeAddProductsToCart(products_array);
} else {
$.growl.error({ title: pdproductattributeslist_title_error, message: pdproductattributeslist_add_error});
}
});
}
};
Object.entries(resp).forEach(([k, v]) => {
if (v.response) {
if (v.id_product_attribute > 0) {
message_ok =
pdproductattributeslist_product +
'<b> ' +
v.product_name +
'</b>, ' +
pdproductattributeslist_variant +
' <b> ' +
v.combination_name +
' </b>' +
pdproductattributeslist_add_ok
$.growl({
title: pdproductattributeslist_title_ok,
message: message_ok,
duration: 1000,
})
} else {
message_ok =
pdproductattributeslist_product +
'<b> ' +
v.product_name +
'</b>, ' +
pdproductattributeslist_add_ok
$.growl({
title: pdproductattributeslist_title_ok,
message: message_ok,
duration: 1000,
})
}
} else if (v.response == false) {
if (v.id_product_attribute > 0) {
message_error =
pdproductattributeslist_product +
'<b> ' +
v.product_name +
'</b>, ' +
pdproductattributeslist_variant +
' <b> ' +
v.combination_name +
'</b>, ' +
pdproductattributeslist_max_qty +
' <b>' +
v.max_quantity +
'</b> ' +
pdproductattributeslist_pcs
$.growl.error({
title: pdproductattributeslist_title_error,
message: message_error,
duration: 1000,
})
} else {
message_error =
pdproductattributeslist_product +
'<b> ' +
v.product_name +
'</b>, ' +
pdproductattributeslist_max_qty +
' <b>' +
v.max_quantity +
'</b> ' +
pdproductattributeslist_pcs
$.growl.error({
title: pdproductattributeslist_title_error,
message: message_error,
duration: 1000,
})
}
}
})
} else {
$.growl.error({
title: pdproductattributeslist_title_error,
message: pdproductattributeslist_add_error,
duration: 15000,
})
}
},
})
},
initEventAddToCartToButtons() {
$('body').on(
'click',
'button.add-to-cart-pdproductattributeslist',
function () {
var products_array = []
var tr_colection = $(this).parent().parent().parent().find('tr')
$(tr_colection).each(function (index) {
elem = $(this).find('td.option_gty')
qty = parseInt(elem.find('input.quantity').val())
if (elem.length > 0 && qty > 0) {
var product = {
id_product: parseInt(elem.data('id-product')),
id_product_attribute: parseInt(elem.data('id-product-attribute')),
quantity: qty,
id_customization: 0,
}
products_array.push(product)
}
})
if (products_array.length > 0) {
PdProductAttributesList.executeAddProductsToCart(products_array)
} else {
$.growl.error({
title: pdproductattributeslist_title_error,
message: pdproductattributeslist_add_error,
})
}
}
)
},
}