Скрипт для добавления товаров "на лету" из списка Рекомендуемых товаров при нахождении в Корзине:
<script>
BX.ready(function() {
var recommendedBlock = document.querySelector('.catalog-element-section-content');
if (!recommendedBlock) return;
if (!BX.Sale.BasketComponent || typeof BX.Sale.BasketComponent.sendRequest !== 'function') {
console.warn('Компонент корзины не найден');
return;
}
// Функция синхронизации кнопок
function syncButtons() {
var basketContainer = document.getElementById('basket-root');
if (!basketContainer) return;
// Собираем ID товаров из видимых элементов корзины
var basketIds = [];
basketContainer.querySelectorAll('.basket-item[data-basket-id]').forEach(function(item) {
if (item.style.display !== 'none') {
var id = parseInt(item.getAttribute('data-basket-id'));
if (id) basketIds.push(id);
}
});
// Обновляем кнопки в рекомендованном блоке
recommendedBlock.querySelectorAll('.catalog-section-item-purchase-buttons').forEach(function(btnContainer) {
var addBtn = btnContainer.querySelector('.catalog-section-item-purchase-button-add');
var addedLink = btnContainer.querySelector('.catalog-section-item-purchase-button-added');
if (!addBtn) return;
var productId = parseInt(addBtn.getAttribute('data-basket-id'));
if (!productId) return;
if (basketIds.includes(productId)) {
addBtn.setAttribute('data-basket-state', 'added');
addBtn.style.display = 'none';
if (addedLink) {
addedLink.setAttribute('data-basket-state', 'added');
addedLink.style.display = '';
}
} else {
addBtn.setAttribute('data-basket-state', 'none');
addBtn.style.display = '';
if (addedLink) {
addedLink.setAttribute('data-basket-state', 'none');
addedLink.style.display = 'none';
}
}
});
}
// Наблюдатель за изменениями в корзине
var basketRoot = document.getElementById('basket-root');
if (basketRoot) {
var observer = new MutationObserver(function() {
clearTimeout(window.syncTimeout);
window.syncTimeout = setTimeout(syncButtons, 100);
});
observer.observe(basketRoot, { childList: true, subtree: true });
}
// Клик по кнопке "В корзину" в рекомендациях
document.addEventListener('click', function(e) {
var addBtn = e.target.closest('[data-basket-action="add"]');
if (!addBtn || !recommendedBlock.contains(addBtn)) return;
setTimeout(function() {
BX.Sale.BasketComponent.sendRequest('refreshAjax', {
fullRecalculation: 'Y'
});
}, 800);
});
// Первоначальная синхронизация
syncButtons();
});
</script>