Прошу помощи со скриптом в checkout.shipping.html

Доброго времени суток!

Есть необходимость подмены наименования поля адреса при выборе определенного способа доставки. Но у самого не хватает познаний в яве. Прошу помощи в решении такой задачи:

На шаге выбора способа доставки предлагается несколько способов доставки. Для каждого способа доставки необходимо заполнить определенные поля адреса.

Необходимо при выборе определенного способа доставки подменять наименование одного из стандартных полей. Например, вместо "Улица, дом, квартира" покупатель должен видеть "Номер отделения".

Понимаю, что это можно сделать в скрипте, расположенном в файле checkout.shipping.html

<script type="text/javascript">
    $(function () {
        {if $external_methods}
            $.get("{$wa->getUrl('/frontend/shipping')}", { shipping_id: [{implode(',', $external_methods)}]}, function (response) {
                for (var shipping_id in response.data) {
                    responseCallback(shipping_id, response.data[shipping_id]);
                }
            }, "json");
        {/if}

                function responseCallback(shipping_id, data) {
                    var name = 'rate_id[' + shipping_id + ']';
                    if (typeof(data) != 'string') {
                        $(".shipping-" + shipping_id + ' input:radio').removeAttr('disabled');
                    }
                    if (typeof(data) == 'string') {
                        $(".shipping-" + shipping_id + ' input[name="' + name + '"]').remove();
                        $(".shipping-" + shipping_id + ' select[name="' + name + '"]').remove();
                        var el = $(".shipping-" + shipping_id).find('.rate');
                        if (el.hasClass('error')) {
                            el.find('em').html(data);
                        } else {
                            el.find('.price, .hint').hide();
                            el.addClass('error').append($('<em class="shipping-error"></em>').html(data));
                        }
                    } else if (data.length > 1) {
                        $(".shipping-" + shipping_id + ' input[name="' + name + '"]').remove();
                        var select = $(".shipping-" + shipping_id + ' select[name="' + name + '"]');
                        var html = '<select class="shipping-rates" name="' + name + '">';
                        for (var i = 0; i < data.length; i++) {
                            var r = data[i];
                            html += '<option data-rate="' + r.rate + '" data-comment="' + (r.comment || '') + '" data-est_delivery="' + (r.est_delivery || '') + '" value="' + r.id + '">' + r.name + ' (' + r.rate + ')</option>';
                        }
                        html += '</select>';
                        if (select.length) {
                            var selected = select.val();
                            select.remove();
                        } else {
                            var selected = false;
                        }
                        select = $(html);
                        $(".shipping-" + shipping_id + " h3").append(select);
                        if (selected) {
                            select.val(selected);
                        }
                        select.trigger('change', 1);
                        $(".shipping-" + shipping_id).find('.rate').removeClass('error').find('.price').show();
                        $(".shipping-" + shipping_id).find('.rate em.shipping-error').remove();
                    } else {
                        $(".shipping-" + shipping_id + ' select[name="' + name + '"]').remove();
                        var input = $(".shipping-" + shipping_id + ' input[name="' + name + '"]');
                        if (input.length) {
                            input.val(data[0].id);
                        } else {
                            $(".shipping-" + shipping_id + " h3").append('<input type="hidden" name="' + name + '" value="' + data[0].id + '">');
                        }
                        $(".shipping-" + shipping_id + " .price").html(data[0].rate);
                        $(".shipping-" + shipping_id + " .est_delivery").html(data[0].est_delivery);
                        $(".shipping-" + shipping_id).find('.rate').removeClass('error').find('.price').show();
                        if (data[0].est_delivery) {
                            $(".shipping-" + shipping_id + " .est_delivery").parent().show();
                        } else {
                            $(".shipping-" + shipping_id + " .est_delivery").parent().hide();
                        }
                        if (data[0].comment) {
                            $(".shipping-" + shipping_id + " .comment").html('<br>' + data[0].comment).show();
                        } else {
                            $(".shipping-" + shipping_id + " .comment").hide();
                        }
                        $(".shipping-" + shipping_id).find('.rate em.shipping-error').remove();
                    }
                }

                $(".checkout-options").on('change', "select.shipping-rates", function (e, not_check) {
                    var opt = $(this).children('option:selected');
                    var li = $(this).closest('li');
                    li.find('.price').html(opt.data('rate'));
                    if (!not_check) {
                        li.find('input:radio').attr('checked', 'checked');
                    }
                    li.find('.est_delivery').html(opt.data('est_delivery'));
                    if (opt.data('est_delivery')) {
                        li.find('.est_delivery').parent().show();
                    } else {
                        li.find('.est_delivery').parent().hide();
                    }
                    if (opt.data('comment')) {
                        li.find('.comment').html('<br>' + opt.data('comment')).show();
                    } else {
                        li.find('.comment').empty().hide();
                    }
                });
//    if (".checkout-options input:radio:checked").length) {
//        $(".checkout-options input:radio:enabled:first").attr('checked', 'checked');
//    }
                $(".checkout-options input:radio").change(function () {
                    if ($(this).is(':checked') && !$(this).data('ignore')) {
                        $(".checkout-options .wa-form").hide();
                        $(this).closest('li').find('.wa-form').show();
                        if ($(this).data('changed')) {
                            $(this).closest('li').find('.wa-form').find('input,select').data('ignore', 1).change().removeData('ignore');
                            $(this).removeData('changed');
                        }
                    }
                });
                $(".wa-address").find('input,select').change(function () {
                    if ($(this).data('ignore')) {
                        return true;
                    }
                    var shipping_id = $("input[name=shipping_id]:checked").val();
                    var loaded_flag = false;
                    setTimeout(function () {
                        if (!loaded_flag && !$(".shipping-" + shipping_id + " .price .loading").length) {
                            $(".shipping-" + shipping_id + " .price").append(' <i class="icon16 loading"></i>');
                        }
                    }, 300);
                    var v = $(this).val();
                    var name = $(this).attr('name').replace(/customer_\d+/, '');
                    $(".checkout-options input:radio").each(function () {
                        if ($(this).val() != shipping_id) {
                            var el = $(this).closest('li').find('[name="customer_' + $(this).val() + name + '"]');
                            if (el.attr('type') != 'hidden') {
                                el.val(v);
                                $(this).data('changed', 1);
                            }
                        }
                    });

                    $.post("{$wa->getUrl('/frontend/shipping')}", $("form").serialize(), function (response) {
                        loaded_flag = true;
                        responseCallback(shipping_id, response.data);
                    }, "json");
                });
            });

</script>

но мозгов не хватает провернуть это дело.

Очень прошу помочь.

1 ответ

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

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