Новости
- 13.11.2019 - Дополнение "Импорт-Экспорт" для Shopkeeper4
- 13.11.2019 - Открыт Telegram канал проекта Shopkeeper
- 26.10.2019 - Импорт и экспорт товаров в Shopkeeper 4 (видео)
- 25.09.2019 - Вышел Shopkeeper v4.0.8
- 01.09.2019 - Сниппет ShoppingCart - универсальная корзина покупок для MODX
- 02.08.2019 - Агрегация в MongoDB (видео)
- 20.06.2019 - Интеграция Shopkeeper4 для MODX (в разработке)
- 30.04.2019 - Shopker - облачный Шопкипер. Первый месяц - бесплатно!
- 31.03.2019 - DotsMenu - удобное выпадающее меню (блог)
- 19.03.2019 - Вышел Catalogfill 2.4.10 для MODX Revo
- 05.02.2019 - Symfony для MODX-разработчиков
- 15.11.2018 - Импорт/экспорт товаров в Shopkeeper 4
- 14.09.2018 - Установка и обзор Shopkeeper4
- 01.06.2018 - Тест производительности Shopkeeper 4
Последние темы
-
Получить цвет статуса товара?
Поддержка3 -
Проблема с giftCards
Поддержка12 -
Paykeeper2 для MODX стал бесплатным
Новости1 -
Изменить стоимость доставки из "Нового" сниппета
Поддержка9 -
Дополнение "Импорт-Экспорт" для Shopkeeper4
Новости1 -
Редактирование карточки товара
MODX - Вопросы и обсуждения2 -
Открыт Telegram канал проекта Shopkeeper
Новости1 -
Дополнительные параметры товаров - несколько списков radio-button
Поддержка2 -
Цена от параметра
Общие вопросы7 -
Импорт и экспорт товаров в Shopkeeper 4 (видео)
Документация, Уроки1 -
Shopkeeper3 и модуль оплаты PayAnyWay
Поддержка5 -
Как в окно редактирования заказа добавить поле типа daterange?
Поддержка10 -
tagmanager2 select вместо checkbox
Поддержка2 -
Пару вопросов по Symfony, Angular, MongoDB
Пожелания и предложения2 -
Подскажите как реализовать. Спасибо
Общие вопросы2 -
CatalogFill не могу настроить импорт.
Поддержка7 -
CatalogFill 2.4.10 в режиме PHP-FMP
Поддержка3 -
TypeScript - Полный Курс за 1 час
Документация, Уроки1 -
Вышел Shopkeeper4 v4.0.8
Новости1 -
Ошибки при попытке импортировать xml
Общие вопросы6
Ограничение на товар в корзине
-
Доброго дня.
В документации ничего не нашла по лимиту выборки товаров для 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 пятилетней давности. -
- Написать плагин на событие "OnSHKaddProduct" чтобы ограничить добавление товара в корзину.
- Используя JavaScript API, проверять нахождение товара в корзине по ID и скрывать кнопку "В корзину" на странице.
-
@Andchir сказал Ограничение на товар в корзине:
OnSHKaddProduct
Вот второй способ кручу уже неделю - не выходит. Может я туго соображаю, но упорно не могу сказать на js, что "если id этого блока равно части имени id в строке каталога - его нужно скрыть". Мозг мой взорвался, поняла - что так ничего не добьюсь.
По первому вроде кажется проще, но снова вопрос по логике:
<div class="[[myplagin]]">Я есть один товар в списке</div>
- Слушаем событие
- Определяем id того, кто полетел в корзину (тут вопрос, по какому именно принципу мы его находим, не сориентируте?)
- Проверяем тв-поле полученного документа, если условие верно передаем в чанк запись, например имя класса.
-
Пример для страницы товара, кнопку которого надо скрыть, если он уже в корзине:
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;
А на странице каталога остается только написать селектор кнопки.
-
@Andchir Ваш скрипт работает на странице товара безупречно.
Пытаюсь сделать как ваша собеседница в каталоге:<script> var SHKloadCartCallback = function(){ var productId = [[+id]]; if( SHK.data.ids.indexOf(productId) > -1 ){ document.getElementById('submitButton-[[+idx]]').style.display = 'none'; } }; </script>
Такой же счетчик
[[+idx]]
используется в чанке карточки товара для селектора кнопки.
Выводится все правильно, для каждой позиции - свой скрипт. Но не работает. В чем может быть дело? Или оно не работает для нескольких позиций на странице? -
Если нужно скрыть кнопку на странице со списком товаров:
<script> var SHKloadCartCallback = function(){ SHK.data.ids.forEach(function(id){ $('input[name="shk-id"][value="' + id+ '"]').closest('form').find(':submit').hide(); }); } </script>
Вместо
':submit'
можно вставить другой селектор кнопки, например CSS класс. -
@Andchir Вставил в шаблон скрипт как есть. Не работает. Не владею JS((((
Может что-то нужно подправить? -
-
@Andchir На локальном сервере пока
-
@Andchir На локальном сервере пока
Вот страничка со списком товаров (сокращено) - может поможет:
<head> <meta charset=UTF-8> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="yandex-verification" content="77bde91011a09577" /> <link href='https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="assets/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <link rel="stylesheet" href="assets/css/slicknav.css"> <link rel="stylesheet" href="assets/css/style.css"> <!--[if lte IE 7]> <link rel="stylesheet" href="assets/css/ie.css" type="text/css" charset="UTF-8" /> <![endif]--> <link rel="stylesheet" href="/assets/components/shopkeeper3/web/css/default/style.css" type="text/css" /> <link rel="stylesheet" href="/assets/components/ajaxform/css/default.css" type="text/css" /> </head> <body> .... <div id="shop-cart" data-shopcart="1" class="mini-cart-count"> <span class="" data-toggle="dropdown" href="#" aria-expanded="true">1</span> </div> ....................... <div class="product"> <div class="row"> <div class="col-xxs-12 col-xs-4 col-sm-3 col-md-2"> <a href="obuchenie/zanyatiya/kristally"><img src="/assets/cache_image/assets/img/crystals_120x120_5e8.jpg" alt="Image" class=""></a> </div> <div class="shedule-price" id="shedule-price-7"> <span class="text-success"><ins>Запись:</ins> <span class="text-danger">300 рублей</span> </span> </div> <div class="shk-item" id="purchase-block-54"> <form action="/obuchenie/zanyatiya/kristally" method="post"> <input type="hidden" name="shk-id" value="54__record-price" /> <input type="hidden" name="shk-name" value="Кристаллы" /> <input type="hidden" name="test__54__add" value="Запись занятия" /> <input name="shk-count" type="hidden" value="1" /> <button id="addto-cart-54" type="submit" name="shk-submit" class="btn btn-default shk-but" target="_blank" style="margin-top:10px;">Купить запись</button> </form> </div> </div> </div> .................... <script src="/assets/js/jquery-1.11.2.min.js"></script> <link href="assets/css/jquery.fancybox.min.css" rel="stylesheet"> <script src="assets/js/jquery.fancybox.min.js"></script> <script type="text/javascript"> $("[data-fancybox]").fancybox({ thumbs : { showOnStart : true } }); </script> <script> var SHKloadCartCallback = function(){ SHK.data.ids.forEach(function(id){ $('input[name="shk-id"][value="' + id+ '"]').closest('form').find(':submit').hide(); }); } </script> <script type="text/javascript" src="/assets/components/shopkeeper3/web/js/lang/ru.js?v=3.2.7"></script> <script type="text/javascript" src="/assets/components/shopkeeper3/web/js/shopkeeper.js?v=3.2.7"></script> <script type="text/javascript"> SHK.data = {"price_total":"375.00","items_total":1,"items_unique_total":1,"delivery_price":0,"delivery_name":"","ids":[54]}; jQuery(document).ready(function(){ SHK.init( {"prodCont":"div.shk-item","site_base_url":"\/","counterField":false,"counterFieldCart":true,"changePrice":"0","flyToCart":"image","noLoader":false,"allowFloatCount":false,"animCart":false,"goToOrderFormPage":false,"orderFormPageUrl":"\/korzina\/oformlenie-zakaza\/","debug":false} ); }); </script> <script type="text/javascript" src="/assets/components/tickets/js/web/editor/jquery.markitup.js"></script> <script type="text/javascript" src="/assets/components/tickets/js/web/default.js"></script> <script type="text/javascript" src="/assets/components/ajaxform/js/default.js"></script> <script type="text/javascript">AjaxForm.initialize({"assetsUrl":"\/assets\/components\/ajaxform\/","actionUrl":"\/assets\/components\/ajaxform\/action.php","closeMessage":"\u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u0435","formSelector":"form.ajax_form","pageId":75});</script> </body>
-
Вашем случае будет так:
<script> var SHKloadCartCallback = function(){ SHK.data.ids.forEach(function(id){ $('input[name="shk-id"][value="' + id+ '__record-price"]').closest('form').find(':submit').hide(); }); } </script>
-
@Andchir Отлично! Большое спасибо!