Не работает счетчик товара при пагинации



  • MODX REVO, shopkeeper последней версии

    На странице:

    plintus-optom.ru/plintusa-potolochnyie/
    

    сделана Аякс пагинация.
    При загрузки дополнительных элементов, кнопки «плюс» и «минус» на счетчике товара на дополнительных элементах не работают.

    gyazo.com/79f58cbcdfa4d38cc502e88bf7f94432
    

    Для этих целей через callbacks добавляется повторно скрипт, который задействует счетчик (ранее он уже присутствовал на странице в футтере).

    <div class="products" id="pdopage">
        [[!+page.nav]]
        <div class="pure-g rows">
            [[!pdoPage?
                &ajaxMode=`button`
                &templates=`4`
                &limit=`[[!count:ne=`0`:then=`12`:else=`0`]]`
                &tpl=`product`
                &includeTVs=`price,unit,count,price_unit,sizes,hit,img,watermark,num`
                &prepareTVs=`img`
            ]] 
        </div>
    </div>
    
    
    <script type="text/javascript">
    pdoPage.callbacks['before'] = function() {};
    pdoPage.callbacks['after'] = function() {
        
    $(".shk-item .count .but-minus, .shk-item .count .but-plus").click(function () {
    
                var shk_count = $(this).parent().parent().find("input[name='shk-count']");
                var count = parseInt(shk_count.val());
    
                if ($(this).hasClass("but-plus")) {
                    shk_count.val(++count);
                }
                if ($(this).hasClass("but-minus")) {
                    if (count != 1) {
                        shk_count.val(--count);
                    }
                }
            });
    }
    </script>
    

    При этом на элементах «первой страницы» при нажатии на «плюс» добавляется сразу 2 товара (т.к. на них действует уже 2 скрипта), а на элементах «второй страницы» счетчик начинает работать нормально.

    Как можно решить проблему?


  • Администраторы

    Не увидел проблемы на первой странице. У меня при нажатии плюcа добавляется единица. Но вообще тут callback-функции не нужны. Нужно использовать это: http://api.jquery.com/on/

    Примерно так:

    $("body").on("click", ".shk-item .count .but-minus, .shk-item .count .but-plus", function () {
    
        var shk_count = $(this).parent().parent().find("input[name='shk-count']");
        var count = parseInt(shk_count.val());
    
        if ($(this).hasClass("but-plus")) {
            shk_count.val(++count);
        }
        if ($(this).hasClass("but-minus")) {
            if (count != 1) {
                shk_count.val(--count);
            }
        }
    });
    

    Вызов только один раз, без калбаков.



  • @Andchir , сейчас на первой странице проблем нет, но если открыть вторую страницу (добавить элементы со второй), на на элементах первой странице счетчик начинает в 2 раза больше добавлять товара.

    Плохо разбираюсь в JS, куда этот код нужно вставить?
    Нужно что-то делать с переменной "body" ?

    На данный момент у меня стоит в шаблоне категории скрипт изменения количества товара в callback и один в footer :

        $(".shk-item .count .but-minus, .shk-item .count .but-plus").click(function () {
    
            var shk_count = $(this).parent().parent().find("input[name='shk-count']");
            var count = parseInt(shk_count.val());
    
            if ($(this).hasClass("but-plus")) {
                shk_count.val(++count);
            }
            if ($(this).hasClass("but-minus")) {
                if (count != 1) {
                    shk_count.val(--count);
                }
            }
        });

  • Администраторы

    @ZVV123

    Плохо разбираюсь в JS, куда этот код нужно вставить?
    Нужно что-то делать с переменной "body" ?

    Куда угодно, где есть jQuery. С "body" ничего делать не нужно.

    но если открыть вторую страницу (добавить элементы со второй), на на элементах первой странице счетчик начинает в 2 раза больше добавлять товара

    Да, теперь увидел.



  • @Andchir , заработало на общих страницах категорий, но счетчик перестал работать на странице с корзиной.

    Посмотрел в коде, вроде шаблон один, код присутствует.



  • @Andchir, причем если добавить в корзину несколько товаров, а потом один удалить, то счетчик начинает работать.

    Консоль пишет ошибку в этом скрипте

    <script>
    // изменение количества товара

    function changeCount() {
        setTimeout(500);
        
        var dataString = $(".orderCartTable form").serialize();
            
    	$.ajax({ 
    		type: 'POST', 
    		url: '/assets/components/shopkeeper3/connector_fe.php', 
    		dataType: 'json', 
    		data: dataString + "&shk_action=recount&psn=2", 
    		beforeSend: function(result) { 
    		},
    		success: function(result){ 
    		},
    		error: function (xhr, ajaxOptions, thrownError) { 
    		    alert(xhr.status); // пoкaжeм oтвeт сeрвeрa
    		    alert(thrownError); // и тeкст oшибки
    		},
    		complete: function(result) { 
    		    SHK.changeCartItemsCount();
    		}
    	});      
    }
    
    $("input[name='count[]']").bind('change, keyup', function(){
        changeCount();
    });
    
    $(".orderCartTable .count .but-minus, .orderCartTable .count .but-plus").click(function () {
    
        var shk_count = $(this).parent().parent().find("input[name='count[]']");
        var count = parseInt(shk_count.val());
    
        if ($(this).hasClass("but-plus")) {
            shk_count.val(++count);
        }
        if ($(this).hasClass("but-minus")) {
            if (count != 1) {
                shk_count.val(--count);
            }
        }
        
        changeCount();
    });
    

    </script>


  • Администраторы

    Счетчик кол-ва товара в каталоге и в корзине это разные счетчики. Они никак не связаны. Поэтому делать их нужно по-разному. Смотрите демо-сайт, примеры чанков корзины. Есть параметр "counterFieldCart", который добавляет полям в корзине счетчики по селектору "input.shk-count".



  • @Andchir сказал Не работает счетчик товара при пагинации:

    input.shk-count

    Данный параметр активен. Ранее корзина работала, последнее что было сделано это был обновлен Shopkeeper с версии 3.2.3 до 3.2.4.

    Классы все проставлены.

    В консоле выдает ошибку на строчке

    $("input[name='count[]']").bind('change, keyup', function(){
    

    Если добавить в корзину несколько товаров и первый раз зайти в нее, то счетчик не работает, если из корзины удалить один из товаров, то счетчик начинает работать.


  • Администраторы

    $ is not defined



  • @Andchir сказал Не работает счетчик товара при пагинации:

    is not defined

    Перенес скрипт библиотеки выше данного скрипта, все заработало.
    Спасибо большое!



  • Добрый день!
    Пытаюсь настроить в корзине автоматический пересчет суммы заказа в зависимости от количества товара. Количество изменяется по клику на ссылки +/- (это благополучно работает). А общий результат не пересчитывается. Это должно работать в автоматическом режиме или надо дописывать код? Заранее спасибо.



Последние темы

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.