Товары-комплекты

Товары-комплекты для Shop-Script

Создание товаров-комплектов, как отдельной единицы

Вы можете настроить динамическую проверку наличия комплектующих на странице корзины при изменении количества товара или его удалении.

Поскольку сделать такое без внесения изменений в тему дизайна не получится, Вам необходимо проделать следующее.

  1. Зайти на страницу Магазин - Витрина - Шаблон - cart.js
  2. Добавить код в функцию, отвечающую за отслеживание изменений количества товара:
        if (typeof $.itemsetsFrontend !== 'undefined') {
            $.itemsetsFrontend.quantityChange(that);
        }
    где that - поле с количеством товара (jQuery объект)
  3. Добавить код в функцию, отвечающую за отслеживание удаления товара:
        if (typeof $.itemsetsFrontend !== 'undefined') {
            $.itemsetsFrontend.cartDelete(that);
        }
    где that - нажатая кнопка удаления (jQuery объект)

Если Вы не уверены в своих знаниях - обратитесь к разработчику темы. Эта задача не займет у него более двух минут.

Рассмотрим примеры для некоторых тем дизайна:

Тема дизайна Default 2.0

Примерно такой же порядок работы в темах Аскетик, Clear, Nifty, Custom, Facebook, Sidebar, Vkontakte и многих других.

  1. Найдите код
        $(".cart input.qty").change(function () {
            var that = $(this);
            if (that.val() > 0) {
                var row = that.closest('div.row');
                if (that.val()) {
                    $.post('save/', {html: 1, id: row.data('id'), quantity: that.val()}, function (response) {
                        row.find('.item-total').html(response.data.item_total);
                        if (response.data.q) {
                            that.val(response.data.q);
                        }
                        if (response.data.error) {
                            alert(response.data.error);
                        } else {
                            that.removeClass('error');
                        }
                        updateCart(response.data);
                    }, "json");
                }
            } else {
                that.val(1);
            }
        });

    И добавьте после "updateCart(response.data)" код, чтобы получилось так:

        $(".cart input.qty").change(function () {
            var that = $(this);
            if (that.val() > 0) {
                var row = that.closest('div.row');
                if (that.val()) {
                    $.post('save/', {html: 1, id: row.data('id'), quantity: that.val()}, function (response) {
                        row.find('.item-total').html(response.data.item_total);
                        if (response.data.q) {
                            that.val(response.data.q);
                        }
                        if (response.data.error) {
                            alert(response.data.error);
                        } else {
                            that.removeClass('error');
                        }
                        updateCart(response.data);
                        if (typeof $.itemsetsFrontend !== 'undefined') {
                            $.itemsetsFrontend.quantityChange(that);
                        }
                    }, "json");
                }
            } else {
                that.val(1);
            }
        });

  2. Найдите код
        $(".cart a.delete").click(function () {
            var row = $(this).closest('div.row');
            $.post('delete/', {html: 1, id: row.data('id')}, function (response) {
                if (response.data.count == 0) {
                    location.reload();
                }
                row.remove();
                updateCart(response.data);
            }, "json");
            return false;
        });

    И добавьте в начале строчку "var that = $(this);" и после "updateCart(response.data)" код, чтобы получилось так:

        $(".cart a.delete").click(function () {
            var that = $(this);
            var row = $(this).closest('div.row');
            $.post('delete/', {html: 1, id: row.data('id')}, function (response) {
                if (response.data.count == 0) {
                    location.reload();
                }
                row.remove();
                updateCart(response.data);
                if (typeof $.itemsetsFrontend !== 'undefined') {
                    $.itemsetsFrontend.cartDelete(that);
                }
            }, "json");
            return false;
        });

Отдельно рассмотрим тему Multishop.

  1. Найдите строчки кода:

        // Изменение количества товаров
        var changeQuantity = function(that, callback) {
            if (that.val() > 0) {
                ...

    Чуть ниже в данной функции будет строка:

    cartBlockRow.find('input.qty').val(that.val());

    После нее вставьте код:

        if (typeof $.itemsetsFrontend !== 'undefined') {
            $.itemsetsFrontend.quantityChange(that);
        }
  2. Найдите код:

        $(".cart a.delete").click(function() {
            var cartRow = $(this).closest('.cart-row');
            var id = cartRow.data('id');
            var i = $(this).find("i");
            i.removeClass("close-bw").addClass("loading");
            $.post('delete/', {html: ($.multishop.ruble == 'html' ? 1 : 0), id: id}, function(response) {
                if (response.data.count == 0) {
                    location.reload();
                }
                cartRow.remove();
                $(".cart-block-row[data-id='" + id + "']").remove();
                updateCart(response.data);
                if ($(".bottom-fixed .mobile-cart").is(":visible")) {
                    bouncePopup($(".bottom-fixed .mobile-cart"), "+ " + $.multishop.translate('Removed from cart'));
                }
            }, "json");
            return false;
        });

    И добавьте код, чтобы получилось так:

        $(".cart a.delete").click(function() {
            var that = $(this);
            var cartRow = $(this).closest('.cart-row');
            var id = cartRow.data('id');
            var i = $(this).find("i");
            i.removeClass("close-bw").addClass("loading");
            $.post('delete/', {html: ($.multishop.ruble == 'html' ? 1 : 0), id: id}, function(response) {
                if (response.data.count == 0) {
                    location.reload();
                }
                cartRow.remove();
                $(".cart-block-row[data-id='" + id + "']").remove();
                updateCart(response.data);
                if ($(".bottom-fixed .mobile-cart").is(":visible")) {
                    bouncePopup($(".bottom-fixed .mobile-cart"), "+ " + $.multishop.translate('Removed from cart'));
                }
                if (typeof $.itemsetsFrontend !== 'undefined') {
                    $.itemsetsFrontend.cartDelete(that);
                }
            }, "json");
            return false;
        });

Если у Вас возникнут какие-либо ошибки - пишите на почту: gapon2401@gmail.com