Ограничение на товар в корзине



  • Доброго дня.

    В документации ничего не нашла по лимиту выборки товаров для 1 заказа.
    Т.е. случай, когда пользователь может отправить в корзину только 1 единицу наименования. Пробовала событием в чанке каталога:

               <button type="submit" onclick="SHKtoCartCallback($('#pr[[+id]]').hide(300));" class="shk-but">+</button></td>
    ****где #pr[[+id]] - это id обертки чанка с формой.
    

    Не срабатывает.

    Может это реализуется доп полем? Мне нужно не товар продать, а услугу. Т.е. в неограниченном количестве для всех, но в лимитированном для 1 карточки заказа.
    Прошу подсказки от знатоков, как скрывать уже добавленное.

    Перекопала гугл, но нахожу старые темы форума, на которых закрыт сам вопрос, хоть задавался он и не однократно.
    Например
    http://modx-shopkeeper.ru/forum/viewtopic.php?id=1947
    http://modx-shopkeeper.ru/forum/viewtopic.php?id=2606
    http://modx-shopkeeper.ru/forum/viewtopic.php?id=2629
    Есть такая тема http://modx-shopkeeper.ru/forum/viewtopic.php?pid=4986#p4986 пятилетней давности.


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

    1. Написать плагин на событие "OnSHKaddProduct" чтобы ограничить добавление товара в корзину.
    2. Используя JavaScript API, проверять нахождение товара в корзине по ID и скрывать кнопку "В корзину" на странице.


  • @Andchir сказал Ограничение на товар в корзине:

    OnSHKaddProduct

    Вот второй способ кручу уже неделю - не выходит. Может я туго соображаю, но упорно не могу сказать на js, что "если id этого блока равно части имени id в строке каталога - его нужно скрыть". Мозг мой взорвался, поняла - что так ничего не добьюсь.

    По первому вроде кажется проще, но снова вопрос по логике:

    <div class="[[myplagin]]">Я есть один товар в списке</div>
    
    1. Слушаем событие
    2. Определяем id того, кто полетел в корзину (тут вопрос, по какому именно принципу мы его находим, не сориентируте?)
    3. Проверяем тв-поле полученного документа, если условие верно передаем в чанк запись, например имя класса.

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

    Пример для страницы товара, кнопку которого надо скрыть, если он уже в корзине:

    var SHKloadCartCallback = function(){
        
        var productId = [[*id]];
        
        if( SHK.data.ids.indexOf(productId) > -1 ){
            
            document.getElementById('submitButton').style.display = 'none';
            
        }
        
    };
    

    submitButton - ID элемента кнопки.



  • @Andchir Спасибо) На странице товара проще. Тут нам не нужно догадываться какая из кнопок нажата :) Сложности у меня именно в категории (ну и сплю я по 3 часа уже вторую неделю).

    var productId = [[+id]];
    

    Получается мне нужно выяснить id нажатой кнопки и сравнить ее с id товаром в корзине. Именно здесь и клинит...

    <div id="[[+id]]-tovar" class="odin-iz-mnogih-na-stranice">Я один товар в списке/div>
    
    

    Корзина

    <tr class="cart-order" id="[[+id]]-tovar2">
        <td class="text-left"><strong>[[+name]]</strong> </td>
        <td class="text-right">[[+price_count_total:num_format]] р.</td>
        <td class="text-right"> <a href="[[+url_del_item]]" title="Удалить" class="shk-del">x</a>
        </td>
    </tr>
    

    Ну и собственно сравнить как-то

    var productId = $("#[[+id]]-tovar");
    var productId2 =$( "#[[+id]]-tovar2");
    var productIdPreobrazuem = productId + '2';
    if (productIdPreobrazuem == productId2) {
    бла-бла-бла
    }
    
    

    Но загвоздка конкретно в этой части:
    var productId = $("#[[+id]]-tovar");
    var productId2 =$( "#[[+id]]-tovar2");
    Если ее писать в чанке карточки в категории - да, сработает, но это куча скриптов в листе страницы.
    Если вынести в отдельный файл, то я пыталась по классу получить id, приклеить к его имени цифру 2, а потом найти готовое имя [[+id]]-tovar2... Ну и конечно ничего не добилась :)

    var myclass = $(".odin-iz-mnogih-na-stranice").attr('id');
    var myclass2 = '$(".' + myclass + '2' + '")';
    

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

    Я дал пример. Если у вас только один товар, который можно положить в корзину один раз,
    то это

    var productId = [[*id]];
    

    не нужно. Нужно сразу прописать ID товара

    var productId = 10;
    

    А на странице каталога остается только написать селектор кнопки.



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