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


Кнопки у shk-count

  • Откатился назад, настроил все заново. Провел эксперимент - Делаю со стандартными чанками, с включенными кнопками для количества - все работает. Отключаю кнопки, добавляю их в стандартный чанк вручную, в таком виде, в котором бы эти кнопки добавил JS:

            <button class="shk_count_button" type="button">-</button>
            <input class="shk-count" type="text" size="2" name="count[]" maxlength="3" title="изменить количество" value="[[+count]]" />
            <button class="shk_count_button" type="button">+</button>
    
    
    

    В таком виде кнопки ничего не делают. Добавляю к стандартным кнопка необходимые для моего скрипта стили (button--minus, button--plus), что бы значение в инпате изменялось моим скриптом, хтмл:

    <tr class="cart-order">
        <td align="left"><b><a href="[[+url]]">[[+name]]</a></b> [[+addit_data]]</td>
        <td>[[+price]] [[+currency]]</td>
        <td>
            <button class="shk_count_button button--minus" type="button">-</button>
            <input class="shk-count" type="text" size="2" name="count[]" maxlength="3" title="изменить количество" value="[[+count]]" />
            <button class="shk_count_button button--plus" type="button">+</button>
        </td>
        <td align="right">
            <a href="[[+url_del_item]]" title="Удалить" class="shk-del"><img src="assets/components/shopkeeper3/web/css/default/delete.gif" width="17" height="17" alt="Удалить" /></a>
        </td>
    </tr>
    

    JS:

    $(document).ready(function() {
        $('.button--minus').on("click", function () {
            var $input = $(this).parent().find('.shk-count');
            var count = parseInt($input.val()) - 1;
            count = count < 1 ? 1 : count;
            $input.val(count);
            $input.change();
            SHK.recountItemAll();
            return false;
        });
    
        $('.button--plus').on("click",function () {
            var $input = $(this).parent().find('.shk-count');
            $input.val(parseInt($input.val()) + 1);
            $input.change();
            SHK.recountItemAll();
            return false;
        });
    });
    

    После этого, при нажатии на кнопку изменения кол-ва, на секунду значение в инпате меняет, появляется лоадер, но тут же пропадает и значение возвращается на изначальное, при повторных нажатиях уже ничгео не происходит.

    Сделал все со стандартными чанками, чтобы избежать своих ошибок, но все равно чего-то не хватает. Подскажите, что еще можно попробовать?

  • @andchir Попробовал немного по-другому.
    Если оставить кнопки включенными по умолчанию, то когда мы меняем значение товара не кнопкой, а вручную, вписывая значение в инпат, то пересчет работает.
    Я попробовал менять значение в инпате своими кнопками и скриптом, но уже без вызова SHK.recountItemAll();, в надежде, что после изменения в инпате, значение само пересчитается. Однако этого не происходит, опять после нажатия на свою кнопку значение на малое время изменяется, появляется лоадер, значение возвращается в первичное состояния, при повторных нажатиях уже значение не меняется. Уже не знаю что и пробовать

  • Где можно посмотреть?

  • @andchir
    Ссылку напишу в приват.
    Сейчас поставил набор параметров для корзины, по умолчанию.
    0_1518204495214_5fa768f6-51b8-461a-934e-8f8d6dabd330-image.png

    У этого набора только шаблоны прописаны вручную, в новые чанки, что бы не работать с исходными
    0_1518204451749_0075112b-5d6d-4efd-bff2-0fd02021bc54-image.png
    Стандартные конпки включены, плюс к ним, в чанке cart__row--self добавлены свои кнопки. Скрипт к своим конпкам сейчас в таком виде:

    $(document).ready(function() {
        $('.button--minus').on("click", function () {
            var $input = $(this).parent().find('.shk-count');
            var count = parseInt($input.val()) - 1;
            count = count < 1 ? 1 : count;
            $input.val(count);
            $input.change();
            SHK.recountItemAll();
            return false;
        });
    
        $('.button--plus').on("click",function () {
            var $input = $(this).parent().find('.shk-count');
            $input.val(parseInt($input.val()) + 1);
            $input.change();
            SHK.recountItemAll();
            return false;
        });
    });
    
    1. Вместо $('.button--plus').on('click' лучше писать что-то вроде $('[data-shopcart="3"]').on('click', '.button--plus' чтобы после обновления корзины эти события оставались привязанными к кнопкам.

    2. Нужно убрать вторую корзину на странице. С двумя корзинами скрипт более сложный.

  • Добрый день. Переделала корзину и так-же вывела кнопки через html. И при первом клике цены обновляются, но при втором клике перекидывает на страницу товара, в чем может быть проблема? Сайт: http://ct23424fd.tmweb.ru/

  • И при первом клике цены обновляются, но при втором клике перекидывает на страницу товара

    Причина в том, что вы не последовали моему первому совету.

  • @andchir Пробовала так-же не работает(((

  • И так пробовала, на первый клик корзина обновляется, при втором перекидывает на главную.
    $(document).on('change', '[data-shopcart] .shk-count', function () {
    SHK.recountItemAll();
    return false;
    });

  • Пробовала так-же не работает(((

    Как пробовали?

 

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

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

    Всем доброго времени суток! Такая проблема, поставил шопкипер, все вроед успешно, очистил кеш, НО, при переходе в Управление заказами - конфигурация - основные настройки - основные настройки, получаю ошибку - Could not find action file at: welcome.php.
    В логах:
    [2019-03-23 00:09:07] (ERROR @ /home/admin/web/sbt35.ru/public_html/core/model/modx/modmanagercontrollerdeprecated.class.php : 152) Could not find action file at: /home/admin/web/sbt35.ru/public_html/core/components/shopkeeper/welcome
    Посмотрел в папках, действительно по этому пути ничего нет. В файлах установщика так же нет по этому пути данных файлов.
    подскажите пожалуйста, как пофиксить это можно? Куда копать?

    Читать далее
  • @Andchir Чета не додумался. Спасибо огромное, завелось.

    Читать далее
  • Потому что в этой функции нет объекта $modx. Можно попробовать добавить такую строчку вверху функции (внутри):

    global $modx;

    Читать далее