Сейчас узнаем, какой подарок выпадет именно Вам
Крутите колесо
Как добавить скидку в корзине за самовывоз или on-line оплату в Tilda
Explore fresh & juicy vegetables
100% Organic Vegetables
BUY
Fresh vegetables from the garden — every day! Our store offers a wide selection of seasonal and traditional vegetables at competitive prices. Go shopping!
0
0

Как добавить скидку в корзине за самовывоз в Tilda

1
Создали скидку в каталоге по скрину ниже
2
Добавили код в блок Т123 на страницу или в footer (страницы и каталога)
В коде заменили подписи на свои

//Название скидки в системе
let dnDelivery = 'Самовывоз 10%';

//Название доставки в корзине
let cartNameDelivery = 'Самовывоз';

//Подпись для подсказки в корзине
let discountHint = 'Скидка за самовывоз 10%';
Библиотека для примера
Скидка за самовывоз
<!--СКИДКА ЗА САМОВЫВОЗ-->
<script>
document.addEventListener("DOMContentLoaded", function() {
(function () {
    //Название скидки в системе
    let dnDelivery = 'Самовывоз 10%';
    //Название доставки в корзине
    let cartNameDelivery = 'Самовывоз';
    //Подпись для подсказки в корзине
    let discountHint = 'Скидка за самовывоз 10%';

    let originalDiscounts = null;
    let pickupDiscounts = null;
    let pickupOn = false;
    let initialized = false;
    let observerInstalled = false;

    function isTildaReady() {
        return (
            window.tcart &&
            Array.isArray(window.tcart.products) &&
            Array.isArray(window.t_cart__discounts)
        );
    }

    function saveOriginalDiscounts() {
        if (!Array.isArray(window.t_cart__discounts)) {
            return false;
        }
        if (originalDiscounts === null) {
            originalDiscounts = window.t_cart__discounts.slice();
            pickupDiscounts = originalDiscounts.slice();
        }
        return true;
    }

    function getDiscountsWithoutPickup() {
        if (!originalDiscounts) {
            return [];
        }
        return originalDiscounts.filter(function (discount) {
            return discount.name !== dnDelivery;
        });
    }

    function getDiscountsWithPickup() {
        if (!pickupDiscounts) {
            return [];
        }
        return pickupDiscounts.slice();
    }

    function updateDiscounts() {
        try {
            if (typeof window.tcart__updateTotalProductsinCartObj === 'function') {
                window.tcart__updateTotalProductsinCartObj();
            }
            if (typeof window.tcart__reDrawTotal === 'function') {
                window.tcart__reDrawTotal();
            }
            if (typeof window.tcart__saveLocalObj === 'function') {
                window.tcart__saveLocalObj();
            }
        } catch (error) {
            console.error('[PickupDiscount] Update error:', error);
        }
    }

    function activePickup() {
        if (!saveOriginalDiscounts()) {
            return;
        }
        window.t_cart__discounts = getDiscountsWithPickup();
        pickupOn = true;
        updateDiscounts();
    }

    function unactivePickup() {
        if (!saveOriginalDiscounts()) {
            return;
        }
        window.t_cart__discounts = getDiscountsWithoutPickup();
        pickupOn = false;
        updateDiscounts();
    }

    function getSelectedDelivery() {
        const deliveryInput = document.querySelector('input.t-radio_delivery:checked');
        if (!deliveryInput) {
            return null;
        }
        return String(deliveryInput.value || '').trim();
    }

    function updateDiscountHint() {
        setTimeout(function () {
            const descriptions = document.querySelectorAll('.t706__cartwin-discounts__description li');
            descriptions.forEach(function (description) {
                if (description) {
                    description.innerText = discountHint;
                }
            });
        }, 100);
    }

    function checkDelivery() {
        if (!initialized) {
            return;
        }
        const deliveryName = getSelectedDelivery();
        if (deliveryName === cartNameDelivery) {
            if (!pickupOn) {
                activePickup();
            }
            updateDiscountHint();
        } else {
            if (pickupOn) {
                unactivePickup();
            }
        }
    }

    function initialDisablePickupDiscount() {
        if (!initialized) {
            return;
        }
        const deliveryName = getSelectedDelivery();
        if (deliveryName !== cartNameDelivery) {
            unactivePickup();
        } else {
            activePickup();
        }
    }

    function installDeliveryObserver() {
        if (observerInstalled) {
            return;
        }
        observerInstalled = true;
        document.addEventListener('change', function (event) {
            if (event.target && event.target.matches('input.t-radio_delivery')) {
                setTimeout(checkDelivery, 50);
            }
        }, true);
    }

    function installCartObserver() {
        const cart = document.querySelector('.t706__cartwin');
        if (!cart) {
            return false;
        }
        const observer = new MutationObserver(function () {
            setTimeout(checkDelivery, 50);
        });
        observer.observe(cart, {
            childList: true,
            subtree: true
        });
        return true;
    }

    function initialize() {
        if (!isTildaReady()) {
            return false;
        }
        if (!saveOriginalDiscounts()) {
            return false;
        }
        if (!initialized) {
            initialized = true;
            installDeliveryObserver();
            let cartObserverAttempts = 0;
            const cartObserverInterval = setInterval(function () {
                cartObserverAttempts++;
                if (installCartObserver()) {
                    clearInterval(cartObserverInterval);
                }
                if (cartObserverAttempts > 100) {
                    clearInterval(cartObserverInterval);
                }
            }, 100);
        }
        initialDisablePickupDiscount();
        setTimeout(initialDisablePickupDiscount, 300);
        setTimeout(initialDisablePickupDiscount, 1000);
        setTimeout(initialDisablePickupDiscount, 2000);
        return true;
    }

    let attempts = 0;
    const maxAttempts = 300;
    const installWatcher = setInterval(function () {
        attempts++;
        if (initialize()) {
            if (attempts > 30) {
                clearInterval(installWatcher);
            }
        }
        if (attempts >= maxAttempts) {
            clearInterval(installWatcher);
            console.error('[PickupDiscount] Initialization timeout');
        }
    }, 100);

    window.__pickupDiscountDebug = {
        state: function () {
            return {
                initialized: initialized,
                pickupOn: pickupOn,
                selectedDelivery: getSelectedDelivery(),
                currentDiscounts: window.t_cart__discounts,
                originalDiscounts: originalDiscounts
            };
        },
        check: checkDelivery,
        enable: activePickup,
        disable: unactivePickup,
        reinitialize: initialize
    };
})();

});
</script>
Библиотека для примера
Скидка за оплаты on-line

//Название скидки в системе
let dnPayment = 'Скидка за оплату 15%';

//Название оплаты в корзине
let cartNamePayment = 'Наличными при получении';

//Подпись для подсказки в корзине
let discountHint = 'Скидка за оплату on-line 15%';
<!-- СКИДКА ЗА ONLINE ОПЛАТУ -->
<script>
(function () {
    const dnPayment = 'Скидка за оплату 15%';
    const cartNamePayment = 'Наличными при получении';
    const discountHint = 'Скидка за оплату on-line 15%';

    let originalDiscounts = null;
    let paymentOn = false;
    let initialized = false;
    let observerInstalled = false;
    let cartObserverInstalled = false;

    function isTildaReady() {
        return (
            window.tcart &&
            Array.isArray(window.tcart.products) &&
            Array.isArray(window.t_cart__discounts)
        );
    }

    function saveOriginalDiscounts() {
        if (!Array.isArray(window.t_cart__discounts)) {
            return false;
        }
        if (originalDiscounts === null) {
            originalDiscounts = window.t_cart__discounts.slice();
        }
        return true;
    }

    function getDiscountsWithoutPayment() {
        if (!originalDiscounts) {
            return [];
        }
        return originalDiscounts.filter(function (discount) {
            return discount.name !== dnPayment;
        });
    }

    function getDiscountsWithPayment() {
        if (!originalDiscounts) {
            return [];
        }
        return originalDiscounts.slice();
    }

    function updateDiscounts() {
        try {
            if (typeof window.tcart__updateTotalProductsinCartObj === 'function') {
                window.tcart__updateTotalProductsinCartObj();
            }
            if (typeof window.tcart__reDrawTotal === 'function') {
                window.tcart__reDrawTotal();
            }
            if (typeof window.tcart__saveLocalObj === 'function') {
                window.tcart__saveLocalObj();
            }
        } catch (error) {
            console.error('[PaymentDiscount] Cart update error:', error);
        }
    }

    function activePayment() {
        if (!saveOriginalDiscounts()) {
            return;
        }
        if (paymentOn) {
            return;
        }
        window.t_cart__discounts = getDiscountsWithPayment();
        paymentOn = true;
        updateDiscounts();
    }

    function unactivePayment() {
        if (!saveOriginalDiscounts()) {
            return;
        }
        const discountsWithoutPayment = getDiscountsWithoutPayment();
        const currentlyHasPaymentDiscount =
            Array.isArray(window.t_cart__discounts) &&
            window.t_cart__discounts.some(function (discount) {
                return discount.name === dnPayment;
            });
        if (!paymentOn && !currentlyHasPaymentDiscount) {
            return;
        }
        window.t_cart__discounts = discountsWithoutPayment;
        paymentOn = false;
        updateDiscounts();
    }

    function getSelectedPayment() {
        const paymentInput = document.querySelector('input.t-radio_payment:checked');
        if (!paymentInput) {
            return null;
        }
        const parent = paymentInput.parentElement;
        if (!parent) {
            return null;
        }
        return String(parent.innerText || '').trim();
    }

    function updateDiscountHint() {
        setTimeout(function () {
            const descriptions = document.querySelectorAll('.t706__cartwin-discounts__description li');
            if (!descriptions.length) {
                return;
            }
            descriptions.forEach(function (description) {
                if (description) {
                    description.innerText = discountHint;
                }
            });
        }, 100);
    }

    function checkPayment() {
        if (!initialized) {
            return;
        }
        const paymentName = getSelectedPayment();
        if (paymentName === cartNamePayment) {
            if (!paymentOn) {
                activePayment();
            }
            updateDiscountHint();
        } else {
            if (paymentOn) {
                unactivePayment();
            } else {
                const hasPaymentDiscount =
                    Array.isArray(window.t_cart__discounts) &&
                    window.t_cart__discounts.some(function (discount) {
                        return discount.name === dnPayment;
                    });
                if (hasPaymentDiscount) {
                    unactivePayment();
                }
            }
        }
    }

    function applyInitialState() {
        if (!initialized) {
            return;
        }
        const paymentName = getSelectedPayment();
        if (paymentName === cartNamePayment) {
            activePayment();
            updateDiscountHint();
        } else {
            unactivePayment();
        }
    }

    function installPaymentObserver() {
        if (observerInstalled) {
            return;
        }
        observerInstalled = true;
        document.addEventListener('change', function (event) {
            if (event.target && event.target.matches('input.t-radio_payment')) {
                setTimeout(checkPayment, 50);
            }
        }, true);
    }

    function installCartObserver() {
        if (cartObserverInstalled) {
            return true;
        }
        const cart = document.querySelector('.t706__cartwin');
        if (!cart) {
            return false;
        }
        const observer = new MutationObserver(function () {
            setTimeout(checkPayment, 50);
        });
        observer.observe(cart, {
            childList: true,
            subtree: true
        });
        cartObserverInstalled = true;
        return true;
    }

    function initialize() {
        if (!isTildaReady()) {
            return false;
        }
        if (!saveOriginalDiscounts()) {
            return false;
        }
        if (!initialized) {
            initialized = true;
            installPaymentObserver();
        }
        installCartObserver();
        applyInitialState();
        setTimeout(applyInitialState, 200);
        setTimeout(applyInitialState, 500);
        setTimeout(applyInitialState, 1000);
        setTimeout(applyInitialState, 2000);
        return true;
    }

    let attempts = 0;
    const maxAttempts = 300;
    const installWatcher = setInterval(function () {
        attempts++;
        const result = initialize();
        if (result && attempts > 30) {
            clearInterval(installWatcher);
        }
        if (attempts >= maxAttempts) {
            clearInterval(installWatcher);
            console.warn('[PaymentDiscount] Initialization timeout');
        }
    }, 100);

    document.addEventListener('DOMContentLoaded', function () {
        setTimeout(initialize, 100);
    });

    window.addEventListener('load', function () {
        setTimeout(initialize, 100);
        setTimeout(applyInitialState, 300);
        setTimeout(applyInitialState, 1000);
        setTimeout(applyInitialState, 2000);
    });

    window.__paymentDiscountDebug = {
        state: function () {
            return {
                initialized: initialized,
                paymentOn: paymentOn,
                selectedPayment: getSelectedPayment(),
                currentDiscounts: window.t_cart__discounts,
                originalDiscounts: originalDiscounts
            };
        },
        check: checkPayment,
        enable: activePayment,
        disable: unactivePayment,
        initialize: initialize
    };
})();
</script>
Made on
Tilda