// ================================================================= // 1. НАДЁЖНЫЙ ОБРАБОТЧИК ДЛЯ КАТАЛОГА И КАРТОЧЕК КРН (БЕЗ ПЕРЕЗАГРУЗОК) 1 // ================================================================= // СВЕРХБЫСТРЫЙ БЕСШОВНЫЙ AJAX-ПЕРЕХВАТ КРН (БЕЗ ПРЫЖКОВ И МИГАНИЯ) // ================================================================= document.addEventListener("DOMContentLoaded", function() { console.log("Новый галс: Скрипт активен, прыжки верстки заблокированы."); // Ловим отправку формы добавления товара document.addEventListener("submit", function(e) { var form = e.target; // Опознаем оригинальную форму jCart по классу if (!form || !form.classList.contains("jcart")) { return true; } // НАМЕРТВО БЛОКИРУЕМ СТАНДАРТНУЮ ПЕРЕЗАГРУЗКУ И СТАРЫЕ СДВИГИ ТЕГОВ! if (e && e.preventDefault) { e.preventDefault(); } // Собираем данные карточки товара на лету var formData = new URLSearchParams(new FormData(form)); formData.append('my-add-button', 'В корзину'); // Маркер для PHP // Отправляем тихий фоновый запрос на ваше родное реле jcart-relay.php fetch('/jcart/jcart-relay.php', { method: 'POST', body: formData, headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-Requested-With': 'XMLHttpRequest' } }) .then(function(response) { return response.text(); // Старое ядро возвращает кусок HTML-верстки }) .then(function(htmlResponse) { if (htmlResponse && htmlResponse.trim() !== "") { // Создаем виртуальный слепок полученного ответа, чтобы вытащить только текст var parser = new DOMParser(); var doc = parser.parseFromString(htmlResponse, "text/html"); var newCartContent = doc.getElementById('jcart') || doc.body; // Вытаскиваем чистые новые данные (например: "1 шт. | 56.00 у.е.") var rawText = newCartContent.innerText || newCartContent.textContent || ""; var cleanText = rawText.replace(/Корзина:\s*/i, "").trim(); if (cleanText) { // 1. ТОЧЕЧНАЯ ЗАМЕНА В ШАПКЕ САЙТА БЕЗ ОПУСТОШЕНИЯ КОНТЕЙНЕРА var topContainer = document.getElementById('top-cart'); if (topContainer) { var topStrong = topContainer.getElementsByTagName('strong')[0]; if (topStrong) { // Меняем строго сухой ТЕКСТ цифр! Старая верстка li и курс стоят намертво topStrong.innerText = cleanText; } } // 2. МГНОВЕННАЯ СИНХРОНИЗАЦИЯ С БОКОВЫМ БЛОКОМ В ADRES.PHP var sideStrong = document.getElementById('sidebar-cart-duplicate-strong'); if (sideStrong) { sideStrong.innerText = cleanText; } // 3. МГНОВЕННЫЙ ПЕРЕСЧЕТ РУБЛЕЙ В САЙДБАРЕ КРН var rateElement = document.getElementById('sidebar-exchange-rate'); var sideContainer = document.getElementById('krn-side-box-item'); if (rateElement && sideContainer) { var rubSpanBox = sideContainer.getElementsByClassName('sidebar-rub-total')[0]; var rubSpan = rubSpanBox ? rubSpanBox.getElementsByTagName('span')[0] : null; var parts = cleanText.split('|'); if (parts.length > 1 && rubSpan) { var ueStr = parts[1].replace(/[^0-9.]/g, ''); var ueTotal = parseFloat(ueStr); var rate = parseFloat(rateElement.innerText.replace(/[^0-9.]/g, '')) || 80; if (!isNaN(ueTotal)) { var rubTotal = ueTotal * rate; // Форматируем рубли с красивыми пробелами var formattedRub = rubTotal.toFixed(2).split("."); formattedRub[0] = formattedRub[0].replace(/\B(?=(\d{3})+(?!\d))/g, " "); rubSpan.innerText = formattedRub.join("."); } } } } } }) .catch(function(error) { console.warn("Фоновый AJAX отклонен сервером, применен мягкий рефреш:", error); window.location.reload(); }); return false; }); });