OC v2.х Помогите с JS в Simple

  • Автор темы Автор темы val06
  • Дата начала Дата начала

val06

Разрушитель (V)
Сообщения
245
Реакции
66
Баллы
707
Добрый день, делаю кратность добавления товара, есть модули кратности, они работают по минималке, то есть установлен минимум товара 4, то и кратность будет 4, у меня задача, что бы добавление не зависело от минималки, к примеру минималка 4, а добавление кратно 1.6, то есть кратность добавления можно выставить любую в карточке товара. На фронте все сделал. работает, а с симплой затык, я с js не особо, а тут вообще не мгу понять почему работает не так как вроде бы должно быть (
Нашел в js симплы код
JavaScript:
 this.decreaseProductQuantity = function($target) {
            var self = this;

            var $quantity = $target.parents(".quantity").find("input");
            var quantity = parseFloat($quantity.val());
            var step = +$quantity.attr("data-minimum") || 1;

            if (!isNaN(quantity) && quantity > step) {
                $quantity.val(quantity - step);

                self.copyCartState($quantity);

                if (self.timerId) {
                    clearTimeout(self.timerId);
                    self.timerId = 0;
                }

                self.timerId = window.setTimeout(function() {
                    self.reloadAll();
                }, 300);
            }
        };
в tpl ку симлы добавил параметр data-next="1.6" дописал в код var next = $quantity.attr("data-next") || 0; проверил по логам все нормально, значение передается, а вот дальше бред какой то, уже прописал тупо сложение
JavaScript:
if (!isNaN(quantity)) {
                if (next > 0) {
                quantity = quantity + next;
                console.log(quantity);
по логам quantity = 4, next = 1.6, т есть по логике quantity должно быть - 5.6, но в console.log(quantity) = 41.6, что не так, почему значения не суммируются, а прилепляются одно к другому ? ((((
 
День добрый. К сожалению, мое сообщение может быть с опозданием.
почему значения не суммируются, а прилепляются одно к другому ?
это происходит потому, что значения (одно или оба) интерпретируются как строки.
Нужно записать так
JavaScript:
quantity = Number(quantity) + Number(next);
 
Добрый день, делаю кратность добавления товара, есть модули кратности, они работают по минималке, то есть установлен минимум товара 4, то и кратность будет 4, у меня задача, что бы добавление не зависело от минималки, к примеру минималка 4, а добавление кратно 1.6, то есть кратность добавления можно выставить любую в карточке товара. На фронте все сделал. работает, а с симплой затык, я с js не особо, а тут вообще не мгу понять почему работает не так как вроде бы должно быть (
Нашел в js симплы код
JavaScript:
 this.decreaseProductQuantity = function($target) {
            var self = this;

            var $quantity = $target.parents(".quantity").find("input");
            var quantity = parseFloat($quantity.val());
            var step = +$quantity.attr("data-minimum") || 1;

            if (!isNaN(quantity) && quantity > step) {
                $quantity.val(quantity - step);

                self.copyCartState($quantity);

                if (self.timerId) {
                    clearTimeout(self.timerId);
                    self.timerId = 0;
                }

                self.timerId = window.setTimeout(function() {
                    self.reloadAll();
                }, 300);
            }
        };
в tpl ку симлы добавил параметр data-next="1.6" дописал в код var next = $quantity.attr("data-next") || 0; проверил по логам все нормально, значение передается, а вот дальше бред какой то, уже прописал тупо сложение
JavaScript:
if (!isNaN(quantity)) {
                if (next > 0) {
                quantity = quantity + next;
                console.log(quantity);
по логам quantity = 4, next = 1.6, т есть по логике quantity должно быть - 5.6, но в console.log(quantity) = 41.6, что не так, почему значения не суммируются, а прилепляются одно к другому ? ((((
попробуй так

JavaScript:
// Функция УМЕНЬШЕНИЯ количества товара (кнопка Минус)
        this.decreaseProductQuantity = function($target) {
            var self = this;

            var $quantity = $target.parents(".quantity").find("input");
            var quantity = parseFloat($quantity.val());
           
            // Получаем минималку и шаг, обязательно переводим в числа
            var min = parseFloat($quantity.attr("data-minimum")) || 1;
            var step = parseFloat($quantity.attr("data-next")) || 1;

            // Вычитаем только если текущее количество больше минимального
            if (!isNaN(quantity) && quantity > min) {
                var newQuantity = quantity - step;
               
                // Если после вычитания получилось меньше минималки, приравниваем к минималке
                if (newQuantity < min) {
                    newQuantity = min;
                }

                // Округляем до 3 знаков, чтобы отсечь баги дробей JS, и записываем в инпут
                $quantity.val(parseFloat(newQuantity.toFixed(3)));

                self.copyCartState($quantity);

                if (self.timerId) {
                    clearTimeout(self.timerId);
                    self.timerId = 0;
                }

                self.timerId = window.setTimeout(function() {
                    self.reloadAll();
                }, 300);
            }
        };

        // Функция УВЕЛИЧЕНИЯ количества товара (кнопка Плюс)
        this.increaseProductQuantity = function($target) {
            var self = this;

            var $quantity = $target.parents(".quantity").find("input");
            var quantity = parseFloat($quantity.val());
           
            // Получаем шаг добавления
            var step = parseFloat($quantity.attr("data-next")) || 1;
           
            // Получаем максимальный остаток (если в вашей версии Симплы есть data-max, иначе можно удалить эти строки)
            var max = parseFloat($quantity.attr("data-max"));

            if (!isNaN(quantity)) {
                var newQuantity = quantity + step;
               
                // Проверка на максимальное количество на складе (если атрибут существует)
                if (!isNaN(max) && newQuantity > max) {
                    newQuantity = max;
                }

                // Округляем до 3 знаков и записываем
                $quantity.val(parseFloat(newQuantity.toFixed(3)));

                self.copyCartState($quantity);

                if (self.timerId) {
                    clearTimeout(self.timerId);
                    self.timerId = 0;
                }

                self.timerId = window.setTimeout(function() {
                    self.reloadAll();
                }, 300);
            }
        };
 
Последнее редактирование:
День добрый. К сожалению, мое сообщение может быть с опозданием.

это происходит потому, что значения (одно или оба) интерпретируются как строки.
Нужно записать так
JavaScript:
quantity = Number(quantity) + Number(next);
спасибо понял
Еще вариант попробуй заменить в симпле install\catalog\view\javascript\simplecheckout.js полностью код на этот
Скачай и попробуй https://mega.nz/file/awd3lIzC#SNHi4fjdHtOZHWWLhsO03qbQdYYyLKKYLZfGTRH0S1s
спасибо. попробую все что ты предложил после выходных.
 
Скачай и попробуй
поставил, работает, немного правда подправил, так как тут надо учитывать 3 вида товара, тот что я описал, товар в который можно ввести любое дробное число и товар по дефолту, плюс то что могут ввести в дробный вместо точки запятую,
исправленный мной файл, если не трудно глянь плиз, может можно что то покультурнее так сказать сделать )
next - товар с кратным добавлением
fract - товар с дробным добавлением
 
поставил, работает, немного правда подправил, так как тут надо учитывать 3 вида товара, тот что я описал, товар в который можно ввести любое дробное число и товар по дефолту, плюс то что могут ввести в дробный вместо точки запятую,
исправленный мной файл, если не трудно глянь плиз, может можно что то покультурнее так сказать сделать )
next - товар с кратным добавлением
fract - товар с дробным добавлением
Подправил пробуй
 
Назад
Верх