Выбор вариантов услуг чекбоксами (а не селектом), кто-нибудь делал?

Хочу упростить стандартный выбор вариантов услуг в карточке товара с чекбоксов+селект на просто чекбоксы. Кто-нибудь делал подобное? Не могу понять где передается данные в корзину. На фронте все легко меняется (например так https://pastebin.com/PkEqw87c), но в корзину передается какая-то ерунда. 

Вкратце: из стандартного https://take.ms/xY6Lx сделать вот такой https://take.ms/e1ZsL, чтобы все варианты Услуг были сразу доступны, без лишних кликов на "включение" услуги.

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

3 ответа

  • 1
    yamaika_biz 27 октября 2019 00:45 #

    Я правильно думаю что в корзину передается значение аттрибута data-price у скрытого инпута? https://take.ms/WZfrX

    Но где лежит скрипт, который обновляет его? Облазил весь product.js раз 15 уже, так и не нашел (

  • 1
    Евгений 28 октября 2019 10:33 #

    в product.js лежит код, который обновляет. Данные берутся из json файла product.html


    services: {json_encode($sku_services)}

    product.js

    Product.prototype.updateSkuServices = function (sku_id) {
        this.form.find("div.stocks div").hide();
        this.form.find(".sku-" + sku_id + "-stock").show();
        for (var service_id in this.services[sku_id]) {
            var v = this.services[sku_id][service_id];
            if (v === false) {
                this.form.find(".service-" + service_id).hide().find('input,select').attr('disabled', 'disabled').removeAttr('checked');
            } else {
                this.form.find(".service-" + service_id).show().find('input').removeAttr('disabled');
                if (typeof (v) == 'string') {
                    this.form.find(".service-" + service_id + ' .service-price').html(this.currencyFormat(v));
                    this.form.find(".service-" + service_id + ' input').data('price', v);
                } else {
                    var select = this.form.find(".service-" + service_id + ' .service-variants');
                    var selected_variant_id = select.val();
                    for (var variant_id in v) {
                        var obj = select.find('option[value=' + variant_id + ']');
                        if (v[variant_id] === false) {
                            obj.hide();
                            if (obj.attr('value') == selected_variant_id) {
                                selected_variant_id = false;
                            }
                        } else {
                            if (!selected_variant_id) {
                                selected_variant_id = variant_id;
                            }
                            obj.replaceWith(this.serviceVariantHtml(variant_id, v[variant_id][0], v[variant_id][1]));
                        }
                    }
                    this.form.find(".service-" + service_id + ' .service-variants').val(selected_variant_id);
                }
            }
        }
    };


  • 1
    Евгений 28 октября 2019 10:34 #

    также см. тут как сделаны доп. услуги без чекбокса

    https://e-chef.ru/rc28---kitel...

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите