<!--КОД ДЛЯ ОПТОВОЙ ПРОДАЖИ-->
<script>
const sizeLabel = 'Выберите формат упаковки';
document.addEventListener("DOMContentLoaded", function() {
(function () {
let snippetSearchRepeat = 0;
let tistore = setInterval(function() {
const productListNum = document.querySelector('.t-store__product-snippet');
if(productListNum) {
if(productListNum.hasAttribute("data-product-url")){
clearInterval(tistore);
сalculateProductsTotal();
};
};
snippetSearchRepeat++;
if(snippetSearchRepeat>50) clearInterval(tistore);
}, 100);
const gridCont = document.querySelectorAll(".js-store-grid-cont");
gridCont.forEach(function (el, index) {
el.addEventListener('tStoreRendered',function(e) {
сalculateProductsTotal();
});
});
const singleProducts = document.querySelectorAll(".js-product-single");
singleProducts.forEach(function (el, index) {
el.addEventListener('tStoreSingleProductsLoaded',function(e) {
сalculateProductsTotal();
});
});
//Изменяем начальное кол-во товара в поле ввода
function сalculateProductsTotal(){
const inputs = document.querySelectorAll('input.t-store__prod__quantity-input');
inputs.forEach(input => {
input.classList.add('input-color-transparent');
});
setTimeout(function(){
const gridRelevantCont = document.querySelectorAll(".t-store__relevants-grid-cont");
gridRelevantCont.forEach(function (el, index) {
el.addEventListener('tStoreRendered',function(e) {
сalculateProductsTotal();
});
});
const product = document.querySelectorAll(".js-product");
product.forEach(function (el, index) {
//Получаем выбранное кол-во из нашего выпадающего списка
const optionsName = el.querySelectorAll('.js-product-option-name');
const targetElement = Array.from(optionsName).find(element => {
return element.textContent.trim() === sizeLabel;
});
let step = 1;
if(targetElement){
const optionWrapper = targetElement.closest('.js-product-option');
let size = optionWrapper.querySelector('select').value;
size = size.replace(/\D/g, '');
size = parseInt(size, 10);
if (!isNaN(size) && size > 0) {
step = size;
};
};
const input = el.querySelector('.t-store__prod__quantity-input');
if (input) {
const currentValue = parseInt(input.value) || 0;
input.value = step;
input.dispatchEvent(new Event('change', { bubbles: true }));
createTotalWrapper(el);
};
});
inputs.forEach(input => {
input.classList.remove('input-color-transparent');
});
}, 300);
};
//При открытии карточки товара
document.addEventListener('click', function(event) {
if(event.target.closest('a[href*="/tproduct/"]')) сalculateProductsTotal();
if(event.target.closest('a[href^="#order"]')) сalculateProductsTotal();
});
//При изменении опций
document.addEventListener('change', function(event) {
if(event.target.closest('.js-product-controls-wrapper')) сalculateProductsTotal();
});
// Округляем до 2 знаков, затем убираем .00 если они есть
function formatNumber(num) {
const rounded = Math.round(num * 100) / 100;
return rounded % 1 === 0 ? rounded.toString() : rounded.toFixed(2);
};
//Формируем сууму по кол-ву в карточках, где требуется показать такой расчёт
function createTotalWrapper(product){
const input = product.querySelector('.t-store__prod__quantity-input');
if (input) {
const quant = +input.value;
const priceWrapper = product.querySelector('.js-store-price-wrapper');
const price = +priceWrapper.querySelector('.js-product-price').getAttribute('data-product-price-def');
const total = formatNumber(price*quant);
const currency = product.querySelector('div[class*="_price-currency"]').textContent;
const totalLabel = price+' x '+quant+' = '+total+' '+currency;
priceWrapper.setAttribute('data-total-label', totalLabel);
priceWrapper.classList.add('t-text');
window.dispatchEvent(new Event('resize', { bubbles: true }));
};
};
//отслеживаем нажатие по кнопкам + и - в товарных карточках
document.addEventListener('click', function(event) {
//Отслеживаем клик по +
const plusWrapper = event.target.closest('.t-store__prod__quantity__plus-wrapper');
if (plusWrapper) {
event.stopImmediatePropagation();
event.preventDefault();
let step = 1;
const product = plusWrapper.closest('.js-product');
// const sizeOption = product.querySelector('.js-product-edition-option[data-edition-option-id="'+sizeLabel+'"]');
// if(sizeOption){
// let size = sizeOption.querySelector('select').value;
// size = size.replace(/\D/g, '');
// size = parseInt(size, 10);
// if (!isNaN(size) && size > 0) {
// step = size;
// };
// };
//Получаем выбранное кол-во из нашего выпадающего списка
const optionsName = product.querySelectorAll('.js-product-option-name');
const targetElement = Array.from(optionsName).find(element => {
return element.textContent.trim() === sizeLabel;
});
if(targetElement){
const optionWrapper = targetElement.closest('.js-product-option');
let size = optionWrapper.querySelector('select').value;
size = size.replace(/\D/g, '');
size = parseInt(size, 10);
if (!isNaN(size) && size > 0) {
step = size;
};
};
const input = plusWrapper.closest('.t-store__prod__quantity').querySelector('.t-store__prod__quantity-input');
if (input) {
const currentValue = parseInt(input.value) || 0;
input.value = currentValue + step;
input.dispatchEvent(new Event('change', { bubbles: true }));
createTotalWrapper(product);
}
};
//Отслеживаем клик по -
const minusWrapper = event.target.closest('.t-store__prod__quantity__minus-wrapper');
if (minusWrapper) {
event.stopImmediatePropagation();
event.preventDefault();
let step = 1;
const product = minusWrapper.closest('.js-product');
// const sizeOption = product.querySelector('.js-product-edition-option[data-edition-option-id="'+sizeLabel+'"]');
// if(sizeOption){
// let size = sizeOption.querySelector('select').value;
// size = size.replace(/\D/g, '');
// size = parseInt(size, 10);
// if (!isNaN(size) && size > 0) {
// step = size;
// };
// };
//Получаем выбранное кол-во из нашего выпадающего списка
const optionsName = product.querySelectorAll('.js-product-option-name');
const targetElement = Array.from(optionsName).find(element => {
return element.textContent.trim() === sizeLabel;
});
if(targetElement){
const optionWrapper = targetElement.closest('.js-product-option');
let size = optionWrapper.querySelector('select').value;
size = size.replace(/\D/g, '');
size = parseInt(size, 10);
if (!isNaN(size) && size > 0) {
step = size;
};
};
const input = minusWrapper.closest('.t-store__prod__quantity').querySelector('.t-store__prod__quantity-input');
if (input) {
const currentValue = parseInt(input.value) || 0;
if((+input.value)>step){
input.value = currentValue - step;
};
input.dispatchEvent(new Event('change', { bubbles: true }));
createTotalWrapper(product);
}
}
}, true);
//Дожидаемся корзину
t_onReady(function() {
setTimeout(function() {
t_onFuncLoad('tcart__init',function() {
changeCartFunction();
});
},200);
});
function changeCartFunction(){
//Кнопка + в корзине
const originalFunctionCartPlus = tcart__product__plus;
tcart__product__plus = function(t) {
let e = t.closest(".t706__product"),
r = e.getAttribute("data-cart-product-i");
let step = 1;
const titleOption = e.querySelector('.t706__product-title__option');
if(titleOption){
const options = titleOption.querySelectorAll('div');
for(let i=0; i<options.length;i++){
let optionText = options[i].textContent;
if(optionText.includes(sizeLabel)){
optionText = optionText.replace(/\D/g, '');
optionText = parseInt(optionText, 10);
if (!isNaN(optionText) && optionText > 0) {
step = optionText;
};
};
};
};
if ((window.tcart.products[r] || (tcart__syncProductsObject__LStoObj(), null != window.tcart.products[r])) &&
(window.tcart.products[r].quantity > 0 &&
void 0 !== window.tcart.products[r].inv &&
window.tcart.products[r].inv > 0 &&
window.tcart.products[r].inv == window.tcart.products[r].quantity)) {
alert(tcart_dict("limitReached"));
}
else {
window.tcart.products[r].quantity += step;
window.tcart.products[r].amount = window.tcart.products[r].price * window.tcart.products[r].quantity;
window.tcart.products[r].amount = tcart__roundPrice(window.tcart.products[r].amount);
e.querySelector(".t706__product-quantity").innerHTML = window.tcart.products[r].quantity;
if ("y" === window.tcart.products[r].single && void 0 !== window.tcart.products[r].portion) {
e.querySelector(".t706__product-portion").innerHTML = tcart__showWeight(
window.tcart.products[r].quantity * window.tcart.products[r].portion,
window.tcart.products[r].unit
);
}
if (window.tcart.products[r].amount > 0) {
e.querySelector(".t706__product-amount").innerHTML = tcart__showPrice(window.tcart.products[r].amount);
} else {
e.querySelector(".t706__product-amount").innerHTML = "";
}
tcart__updateTotalProductsinCartObj();
tcart__reDrawCartIcon();
tcart__reDrawTotal();
tcart__saveLocalObj();
}
};
//Кнопка - в корзине
const originalFunctionCartMinus = tcart__product__minus;
tcart__product__minus = function(t) {
var e = t.closest(".t706__product"),
r = e.getAttribute("data-cart-product-i");
let step = 1;
const titleOption = e.querySelector('.t706__product-title__option');
if(titleOption){
const options = titleOption.querySelectorAll('div');
for(let i=0; i<options.length;i++){
let optionText = options[i].textContent;
if(optionText.includes(sizeLabel)){
optionText = optionText.replace(/\D/g, '');
optionText = parseInt(optionText, 10);
if (!isNaN(optionText) && optionText > 0) {
step = optionText;
};
};
};
};
(window.tcart.products[r] || (tcart__syncProductsObject__LStoObj(),
null != window.tcart.products[r])) && (
window.tcart.products[r].quantity > 0 && (window.tcart.products[r].quantity-=step),
window.tcart.products[r].amount = tcart__roundPrice(
window.tcart.products[r].price * window.tcart.products[r].quantity
),
window.tcart.products[r].amount > 0 && (
e.querySelector(".t706__product-amount").innerHTML = tcart__showPrice(
window.tcart.products[r].amount
)
),
window.tcart.products[r].amount > 0 &&
"y" === window.tcart.products[r].single &&
void 0 !== window.tcart.products[r].portion && (
e.querySelector(".t706__product-portion").innerHTML = tcart__showWeight(
window.tcart.products[r].quantity * window.tcart.products[r].portion,
window.tcart.products[r].unit
)
),
e.querySelector(".t706__product-quantity").innerHTML = window.tcart.products[r].quantity,
0 == window.tcart.products[r].quantity && tcart__product__del(t),
tcart__updateTotalProductsinCartObj(),
tcart__reDrawCartIcon(),
tcart__reDrawTotal(),
tcart__saveLocalObj()
)
};
};
})();
});
</script>
<style>
*{
user-select:none;
}
.input-color-transparent{
color:transparent;
}
.t706__cartwin-content {
max-width: 800px;
}
.js-product .t-product__option-select {
padding: 8px 30px 8px 14px;
outline: none;
}
.t-store .t-store__grid-cont .t-product__option-variants {
width: 100%;
max-width: none;
}
.js-product .t-product__option-variants:after {
top: 0px;
}
input.t-store__prod__quantity-input {
pointer-events: none;
min-width: 45px;
}
.js-store-price-wrapper:after {
content: attr(data-total-label);
display: block;
}
.t1002__product-amount {
display: none;
}
span.t706__product-quantity {
pointer-events: none;
}
.t-store__card__textwrapper {
display: flex;
flex-direction: column;
}
.js-store-price-wrapper.t-store__card__price-wrapper {
margin-top: auto;
}
.t-store__card__wrap_all {
border-radius: 20px;
overflow: hidden;
}
.t-store .t-store__card__wrap_all .store__card__wrap_txt-and-opts {
padding-bottom: 10px;
}
.t-store .t-store__grid-cont .t-product__option-variants {
width: 100%;
max-width: none;
}
.t-store .t-store__card__wrap_all .t-store__card__btns-wrapper {
width: 100%;
}
.t-store__card__btns-wrapper.js-store-buttons-wrapper.t-store__card__btns-wrapper--quantity {
display: flex;
flex-wrap: wrap;
}
.t-store .t-store__grid-cont a.js-store-prod-btn.t-store__card__btn.t-btn {
flex-basis: 100%;
}
.t-store .t-store__grid-cont .t-store__prod__quantity {
flex-grow: 1;
display: flex;
}
.t-store .t-store__grid-cont input.t-store__prod__quantity-input {
flex-grow: 1;
}
</style>