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


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

  • 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

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

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

 

Последние комментарии

  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

    Читать далее
  • J

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

    Читать далее
  • J

    Участник @Jokerit написал в TagManager2 отображает в фильтре удаленные значения TV-полей:

    tmRefresh

    Так и не смог найти как включить

    Читать далее