// Функції для роботи з корзиною (замінити в cart.php) function changeQuantity(sku, change) { const input = document.querySelector(`[data-sku="${sku}"] .quantity-input`); const currentValue = parseInt(input.value); const newValue = Math.max(1, currentValue + change); input.value = newValue; updateQuantity(sku, newValue); } function updateQuantity(sku, quantity) { quantity = Math.max(1, parseInt(quantity)); // Показуємо індикатор завантаження showLoadingState(sku); const formData = new FormData(); formData.append('action', 'update'); formData.append('product_sku', sku); formData.append('quantity', quantity); fetch('/cart/cart.php', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { // Оновлюємо лічільник в хедері if (typeof updateCartCount === 'function') { updateCartCount(data.cart_count); } // Оновлюємо дані на сторінці updateCartDisplay(data); // Приховуємо індикатор завантаження hideLoadingState(sku); } else { alert('Помилка: ' + data.message); hideLoadingState(sku); } }) .catch(error => { console.error('Error:', error); alert('Помилка оновлення'); hideLoadingState(sku); }); } function removeItem(sku) { if (!confirm('Ви впевнені що хочете видалити цей товар з корзини?')) { return; } // Показуємо індикатор завантаження showLoadingState(sku); const formData = new FormData(); formData.append('action', 'remove'); formData.append('product_sku', sku); fetch('/cart/cart.php', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { // Оновлюємо лічільник в хедері if (typeof updateCartCount === 'function') { updateCartCount(data.cart_count); } // Видаляємо товар з DOM const itemElement = document.querySelector(`[data-sku="${sku}"]`); if (itemElement) { itemElement.style.opacity = '0.5'; setTimeout(() => { itemElement.remove(); // Перевіряємо чи корзина порожня checkEmptyCart(); // Оновлюємо суми updateCartDisplay(data); }, 300); } } else { alert('Помилка: ' + data.message); hideLoadingState(sku); } }) .catch(error => { console.error('Error:', error); alert('Помилка видалення'); hideLoadingState(sku); }); } // Функція для оновлення відображення корзини function updateCartDisplay(data) { // Перераховуємо суми на основі поточних даних в DOM recalculateCartTotals(); // Оновлюємо повідомлення про знижку updateDiscountNotice(data.has_discount); } // Функція для перерахунку сум function recalculateCartTotals() { let originalTotal = 0; let totalPairs = 0; // Проходимо по всіх товарах в корзині document.querySelectorAll('.cart-item').forEach(item => { const quantityInput = item.querySelector('.quantity-input'); const priceText = item.querySelector('.item-price-inline').textContent; const totalElement = item.querySelector('.item-total'); if (quantityInput && priceText && totalElement) { const quantity = parseInt(quantityInput.value); const price = parseInt(priceText.replace(/\D/g, '')); const itemTotal = quantity * price; // Оновлюємо суму товару totalElement.textContent = itemTotal.toLocaleString('uk-UA') + ' грн'; originalTotal += itemTotal; totalPairs += quantity; } }); // Перевіряємо знижку const hasDiscount = totalPairs >= 2; let finalTotal = originalTotal; let discountAmount = 0; if (hasDiscount) { discountAmount = originalTotal * 0.20; finalTotal = originalTotal - discountAmount; } // Оновлюємо summary в корзині (якщо є) const summaryContainer = document.querySelector('.cart-summary'); if (summaryContainer) { let summaryHTML = `
Сума без знижки: ${originalTotal.toLocaleString('uk-UA')} грн
`; if (hasDiscount) { summaryHTML += `
Знижка: ${discountAmount.toLocaleString('uk-UA')} грн
`; } summaryHTML += `
Загальна сума: ${finalTotal.toLocaleString('uk-UA')} грн
`; summaryContainer.innerHTML = summaryHTML; } // Оновлюємо order summary (якщо є) const orderSummary = document.querySelector('.order-summary'); if (orderSummary) { const itemsCostRow = orderSummary.querySelector('.summary-row:first-child span:last-child'); const finalTotalElement = document.getElementById('finalTotal'); if (itemsCostRow) { itemsCostRow.textContent = finalTotal.toLocaleString('uk-UA') + ' грн'; } if (finalTotalElement) { finalTotalElement.textContent = finalTotal.toLocaleString('uk-UA') + ' грн'; } } } // Функція для оновлення повідомлення про знижку function updateDiscountNotice(hasDiscount) { const noticeElement = document.querySelector('.single-pair-notice'); if (hasDiscount && noticeElement) { // Приховуємо повідомлення про знижку noticeElement.style.display = 'none'; } else if (!hasDiscount && !noticeElement) { // Показуємо повідомлення про знижку const cartItems = document.querySelector('.cart-items'); if (cartItems) { const notice = document.createElement('div'); notice.className = 'single-pair-notice'; notice.innerHTML = '💡 Замовте 2 пари різного або однакового взуття і отримайте знижку 20%!'; cartItems.appendChild(notice); } } else if (!hasDiscount && noticeElement) { // Показуємо існуюче повідомлення noticeElement.style.display = 'block'; } } // Функція для показу індикатора завантаження function showLoadingState(sku) { const item = document.querySelector(`[data-sku="${sku}"]`); if (item) { item.style.opacity = '0.6'; item.style.pointerEvents = 'none'; // Додаємо спінер до кнопок кількості const quantityButtons = item.querySelectorAll('.quantity-btn'); quantityButtons.forEach(btn => { btn.style.opacity = '0.5'; btn.disabled = true; }); } } // Функція для приховування індикатора завантаження function hideLoadingState(sku) { const item = document.querySelector(`[data-sku="${sku}"]`); if (item) { item.style.opacity = '1'; item.style.pointerEvents = 'auto'; // Повертаємо кнопки кількості const quantityButtons = item.querySelectorAll('.quantity-btn'); quantityButtons.forEach(btn => { btn.style.opacity = '1'; btn.disabled = false; }); } } // Функція для перевірки порожньої корзини function checkEmptyCart() { const cartItems = document.querySelectorAll('.cart-item'); if (cartItems.length === 0) { // Корзина порожня - показуємо повідомлення const cartContainer = document.querySelector('.cart-container'); if (cartContainer) { cartContainer.innerHTML = `

Ваше замовлення

← Повернутись до покупок
🛒

Ваш кошик порожній

Додайте товари до кошика щоб продовжити покупки

Перейти до каталогу
`; } } }
Fatal error: Uncaught Error: Call to undefined function getCartSessionId() in /home/horos27/public_html/cart/cart.php:12 Stack trace: #0 {main} thrown in /home/horos27/public_html/cart/cart.php on line 12