quantity у товаров на стр. списка товаров

Тема в разделе "Общие вопросы", создана пользователем toren, 13 фев 2015.

  1. toren

    toren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Подскажите, как сделать чтобы на стр. списка товаров, у товаров было поле, в котором можно указать какое количество положить в корзину, как на стр. карточки товара? Спасибо.
     
  2. Илюха

    Илюха Новичок

    Сообщения:
    28
    Симпатии:
    19
    Попробуйте так:
    вносим изменения в файл /.../catalog/controller/product/category.php
    после строки №215:
    добавть

    и в файле /.../catalog/view/theme/default/template/product/
    category.tpl
    в строке №128 это:
    заменить на это (отдельное СПАСИБО ув. Ravilr):

    или
    во втором случае можно изменить размер поля ввода количества товаров, ну и скомпоновать поинтереснее, например поле ввода количества товара поставить рядом с кнопкой купить, а кнопку "в закладки" и "в сравнения" - расположить рядом, но ниже... в общем начинается творчество ))
     
    Последнее редактирование: 13 фев 2015
    rider76, Romans и Ravilr нравится это.
  3. toren

    toren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Спасибо, будем ждать)
     
  4. Ravilr

    Ravilr Специалист

    Сообщения:
    3.041
    Симпатии:
    840
    @Илюха тут надо вторым параметром передавать кол-во,
    Код:
    onclick="cart.add('<?php echo $product['product_id']; ?>', '2')
     
    Последнее редактирование: 13 фев 2015
  5. Ravilr

    Ravilr Специалист

    Сообщения:
    3.041
    Симпатии:
    840
    @Илюха исправляйте )) ;)

    вот так должно быть
    HTML:
    <input class="form-control text-center" type="text" name="quantity" value="1" id="quantity"/>
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', $(this).parent().find('#quantity').val() );"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button>
     
    Последнее редактирование: 13 фев 2015
    Илюха нравится это.
  6. Илюха

    Илюха Новичок

    Сообщения:
    28
    Симпатии:
    19
    toren, на работе сегодня не было времени заняться этим вопросом вплотную, только денвер успел поставить :D
    Вообще ходят слухи, что на работе надо работу работать... :D

    Ravilr, спасибо за помощь!! Поднимаю во второй пост!
     
  7. toren

    toren Новичок

    Сообщения:
    6
    Симпатии:
    0
    Спасибо, я пока не пробовал вышеуказанный код, надеюсь будет норм)
     
  8. Илюха

    Илюха Новичок

    Сообщения:
    28
    Симпатии:
    19
    что за чудеса? кто убрал строчку:
    Код:
    <input type="text" name="quantity" value="1" id="quantity"/>
    ???
     
  9. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.338
    Симпатии:
    698
    Я убрал. Меня попросил @Ravilr Она там не нужна
     
  10. Илюха

    Илюха Новичок

    Сообщения:
    28
    Симпатии:
    19
    Romans, можно двумя способами делать (см. пост #2): 1-ый вариант для ленивых; 2-ой вариант для "дизайнеров" :D
     
  11. vikaharkov

    vikaharkov Продвинутый пользователь

    Сообщения:
    478
    Симпатии:
    61
    Тема с "бородой", но всё ещё актуальна.
    Тогда уже сразу и кнопку "Купить" переделывать надо бы в кнопку "В корзину". А то она, Купить, алогична теперь по своему алгоритму. Чел указал количество товара, но чтобы положить его в корзину, ему нужно нажать кнопку Купить, после чего он автоматом перебрасывается в ту же Корзину, где есть такой же выбор количества.

    ИМХО, но логично было бы так - указал количество и нажал В корзину. Тебя никуда не перебрасывает, просто товар попадает в Корзину (сообщение об этом). Пошел дальше по каталогу смотреть, выбрал ещё чего, снова нажал. Когда наберет нужного, нажимает Оформить (но это ещё одна кнопка, которой нет, ну тогда просто идёт вверх в Корзину и оформляет). Ну где-то так.

    По вашим рекомендациям один хлопчик делал себе, правда, видно немного переделал под себя. У него приемлемо работает.
     
  12. Ecsiron

    Ecsiron Продвинутый пользователь

    Сообщения:
    415
    Симпатии:
    52
    Правильной дорогой идете товарищи, я так и сделал. вместо слова купить у меня корзина, если ее нажать она и открывается)

    Ты сейчас упадешь с кровати, но самый распространенный вопрос, а где кнопка Корзина, это уже не смешно.
     
  13. Ecsiron

    Ecsiron Продвинутый пользователь

    Сообщения:
    415
    Симпатии:
    52
    Пожалуйста поделитесь OCMOD-ом для 2.3.0.2!:)
     
  14. marshall

    marshall Пользователь

    Сообщения:
    43
    Симпатии:
    0
    кто нить доделал?
     
  15. Ravilr

    Ravilr Специалист

    Сообщения:
    3.041
    Симпатии:
    840
    Кто внимательно читал и делал, то все сделал.
     
    marshall нравится это.
  16. marshall

    marshall Пользователь

    Сообщения:
    43
    Симпатии:
    0
    а есть возможность добавить -;+?
    Код:
    <span class="minus" onclick="quantity_control('<?php echo $product_id; ?>', '<?php echo $minimum; ?>', '<?php echo $quantity; ?>', '-')">-</span>
        <input type="text" name="quantity" class="quantity_input p_q_<?php echo $product_id; ?>" size="2" value="<?php echo $minimum; ?>" data-id="<?php echo $product_id; ?>" data-maximum="<?php echo $quantity; ?>" /> 
        <span class="plus" onclick="quantity_control('<?php echo $product_id; ?>', '<?php echo $minimum; ?>', '<?php echo $quantity; ?>', '+')">+</span>
        <div class="stock_warning s_w_<?php echo $product_id; ?>"></div>
    
    у меня выходит так на скрине.
    Скрипт
    Код:
    $(document).ready(function() {
        all_inputs();
        if ($('.quantity_cart').length != 0) {$('.quantity_div').remove();}
        $('.option input[type="checkbox"]').bind('change', function() {calculate_price();});
        $('.option input[type="radio"]').bind('change', function() {calculate_price();});
        $('.option select').bind('change', function() {calculate_price();});
    });
    
    function quantity_control(product_id ,minimum, maximum, flag) {
        var p_q = $('.p_q_' + product_id);
        var p_q_val = Number((p_q).val());
        var minimum = Number(minimum);
        var maximum = Number(maximum);
    
        var d_q = $('.d_q_'+product_id).text();
        var d_p = $('.d_p_'+product_id).text();
    
    
        if($('input[name^=qcs]').val() == 1) {
            var maximum = 9999;
        } else {
            var maximum = Number(maximum);
        }
    
        if (flag == '+') {
            if ((p_q_val + minimum) <= maximum) {
                p_q.val(Math.round(((p_q_val + minimum)*10))/10);
                if (d_q !== '' && d_p !== '' && p_q.val() >= Number(d_q)) {
                    calc_discount_price(product_id, p_q.val())
                } else {
                    calculate_price(product_id, p_q.val())
                }
            } else {
                quantity_alert(product_id, maximum);
            }
        }
    
        if (flag == '-') {
            if (Number(p_q_val > minimum)) {
                p_q.val(Math.round(((p_q_val - minimum)*10))/10);
                if (d_q !== '' && d_p !== '' && p_q.val() >= Number(d_q)) {
                    calc_discount_price(product_id, p_q.val())
                } else {
                    calculate_price(product_id, p_q.val())
                }
            }
        }
    }
    
    
    function calc_discount_price(product_id, minimum) {
    
        var d_q = $('.d_q_'+product_id).text();
        var d_p = $('.d_p_'+product_id).text();
        var old_price = $('.old_price').text();
        var price_old = $('.price-old .price_'+product_id).text();
        d_p = parseFloat(d_p);
    
        if ($('input[name=\'product_id\']').val() != product_id) {
            if (price_old !== '') {
                var main_price = Number($('.price_'+product_id).attr('price'));
                var special = d_p;
            } else {
                var main_price = d_p;
                var special = Number($('.special_'+product_id).attr('price'));
            }
            var new_price = main_price * minimum;
            var new_special = special * minimum;
    
            $('.price_'+product_id).html(price_format(new_price));
            $('.special_'+product_id).html(price_format(new_special));
        } else {
            var options_price = 0;
            var points = Number($('#formated_points').attr('points'));
            var minimum = $('.quantity_input').val();
    
            if (old_price !== '') {
                var main_price = Number($('.p_price').attr('price'));
                var special = d_p;
            } else {
                var main_price = d_p;
                var special = Number($('.p_special').attr('price'));
            }
    
            $('.option input:checked, .option option:selected').each(function() {
                if ($(this).attr('price_prefix') == '+') {
                    options_price += Number($(this).attr('price'));
                    points += Number($(this).attr('points'));
                }
                if ($(this).attr('price_prefix') == '-') {
                    options_price -= Number($(this).attr('price'));
                    points -= Number($(this).attr('points'));
                }
                if ($(this).attr('price_prefix') == ' ') {
                    options_price = Number($(this).attr('price'));
                    main_price = 0;
                    special = 0;
                }
            });
    
            var new_price = (main_price + options_price) * minimum;
            var new_special = (special + options_price) * minimum;
            var new_points = points * minimum;
            $('.p_price').html(price_format(new_price));
            $('.p_special').html(price_format(new_special));
            $('#formated_points').html(new_points);
        }
    }
    
    function quantity_alert(product_id, maximum) {
        if(maximum <= 0) {
            $('.s_w_'+product_id).text('На нашем складе данный товар закончился.').fadeIn().delay('2000').fadeOut();
        } else {
            $('.s_w_'+product_id).text('На нашем складе данного товара осталось всего ' + maximum + ' шт!').fadeIn().delay('2000').fadeOut();
        }
    }
    
    function calculate_price(product_id, minimum) {
    
        var d_q = $('.d_q_'+product_id).text();
        var d_p = $('.d_p_'+product_id).text();
        if (d_q !== '' && d_p !== '' && minimum >= Number(d_q)) {
            return calc_discount_price(product_id, minimum);
        }
    
        if ($('input[name=\'product_id\']').val() != product_id) {
            var main_price = Number($('.price_'+product_id).attr('price'));
            var special = Number($('.special_'+product_id).attr('price'));
            var new_price = main_price * minimum;
            var new_special = special * minimum;
            $('.price_'+product_id).html(price_format(new_price));
            $('.special_'+product_id).html(price_format(new_special));
        } else {
            var options_price = 0;
            var points = Number($('#formated_points').attr('points'));
            var minimum = $('.quantity_input').val();
    
            var main_price = Number($('.p_price').attr('price'));
            var special = Number($('.p_special').attr('price'));
    
            $('.option input:checked, .option option:selected').each(function() {
                if ($(this).attr('price_prefix') == '+') {
                    options_price += Number($(this).attr('price'));
                    points += Number($(this).attr('points'));
                }
                if ($(this).attr('price_prefix') == '-') {
                    options_price -= Number($(this).attr('price'));
                    points -= Number($(this).attr('points'));
                }
                if ($(this).attr('price_prefix') == ' ') {
                    options_price = Number($(this).attr('price'));
                    main_price = 0;
                    special = 0;
                }
            });
    
            var new_price = (main_price + options_price) * minimum;
            var new_special = (special + options_price) * minimum;
            var new_points = points * minimum;
            $('.p_price').html(price_format(new_price));
            $('.p_special').html(price_format(new_special));
            $('#formated_points').html(new_points);
        }
    }
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      954 байт
      Просмотров:
      23
    Последнее редактирование: 14 май 2018
  17. Ravilr

    Ravilr Специалист

    Сообщения:
    3.041
    Симпатии:
    840
    Да есть, но то что вы пробуете, нужно изучать и скорей всего адаптировать под вас.

    Я обычно такое за 800р. делаю...
     
  18. Sanik

    Sanik Пользователь

    Сообщения:
    226
    Симпатии:
    3
    Что то никак не получается вывести в сопутствующие товары по аналогии, или там свои нюансы?
    В контроллере для releted уже есть вот такая строчка (ниже) и поле ввода количества сделать могу, но при добавлении в корзину добавляеться только один товар
    Код:
    'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
    В product.tpl вот так произвольно 10 даже подставляю
    Код:
    <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '10');"><?php echo $button_cart; ?></button>
    Но в итоге всеравно в корзину добавляеться только один товар, не могу понять в чем тут загвоздка..
     
  19. Ravilr

    Ravilr Специалист

    Сообщения:
    3.041
    Симпатии:
    840
    Для сопутствующих по другому нужно делать. Необходимо доработать, чтобы значение брал из функции. На данный момент, если посмотреть мы увидим что значение кол-ва берется только из поля количества. С отпуска выйду, напишу что и как.. если напомните.
     
  20. Sanik

    Sanik Пользователь

    Сообщения:
    226
    Симпатии:
    3
    Сделать то можно, но проблема в том (выяснил), что все это из-за модуля всплывающей корзины, автор которой пока не отвечает, если отключить корзину или убрать ее код js то все работает, плюс минус добавить не проблема, но когда подставляю вместо <?php echo $product['minimum']; ?> произвольное число - должно работать, оно и работает, но только тогда когда убираю js код корзины, а js мне пока трудно понять и не могу понять в чем проблема, модуль платный, поэтому не знаю, можно ли выставлять здесь его часть кода.
    P.S.
    Этот вопрос решил.. Спасибо.
     
    Последнее редактирование: 13 июл 2018