Изменение количества товаров в InstantShop

InstantCMS 1.X
#1 31 мая 2019 в 09:05
Пытаюсь сделать изменение количества товаров в InstantShop с помощью стрелок или кнопок ±, типа как здесь:

В файлах \templates\shablon\components\com_inshop_item.tpl и \templates\shablon\components\com_inshop_items.tpl прикрутил скрипт:
  1.  
  2. <input name="qty" style="width:30px;text-align:center" value="1" id="num_count" />
  3. <input type="button" value="-" id="button_minus">
  4. <input type="button" value="+" id="button_plus">
  5.  
  6. <script>
  7. var numCount = document.getElementById('num_count');
  8. var plusBtn = document.getElementById('button_plus');
  9. var minusBtn = document.getElementById('button_minus');
  10. plusBtn.onclick = function() {
  11. var qty = parseInt(numCount.value);
  12. qty = qty + 1;
  13. numCount.value = qty;
  14. }
  15. minusBtn.onclick = function() {
  16. var qty = parseInt(numCount.value);
  17. qty = qty - 1;
  18. numCount.value = qty;
  19. }
  20. </script>
  21.  
В результате на странице товара (где счетчик один) всё работает, товары добавляются.

А вот на странице списка товаров (где счетчиков несколько) не работает. Как-то через раз, то у одного товара всё же можно изменить количество, то вообще нигде нельзя. И в любом случае в корзину приходит 1 штука.
Я в js не спец.
Может, кто подскажет?
Или есть готовое решение?
Или кто-то знает заведомо рабочий скрипт для нескольких счетчиков на одной странице?
#2 31 мая 2019 в 14:17
Я использовал такой скрипт в конце файла com_inshop_items.tpl

  1. <script type="text/javascript" >
  2. {literal}
  3. $(document).ready(function() {
  4. $('.minus_qty').click(function () {
  5. var $input = $(this).parent().find('input');
  6. var count = parseInt($input.val()) - 1;
  7. count = count < 1 ? 1 : count;
  8. $input.val(count);
  9. $input.change();
  10. return false;
  11. });
  12. $('.plus_qty').click(function () {
  13. var $input = $(this).parent().find('input');
  14. $input.val(parseInt($input.val()) + 1);
  15. $input.change();
  16. return false;
  17. });
  18. });
  19. {/literal}
  20. </script>
  21.  
Строка с ПлюсомМиносум и инпутом выглядит так
  1. <span class="minus_qty">-</span><input name="qty" style="width:40px !important;text-align:center; border: none;" class="amount" value="1" /><span class="plus_qty">+</span>
#3 31 мая 2019 в 14:24
Олег с клещами, вам надо каждому элементу страницы html присвоить уникальный id, чтобы js работал именно с ним. Ведь если вы пишете, например, $('div')… то js ВСЕ div'ы на странице выбирает.

Как это конкретно сделать, особенно, если список формируется динамически, в цикле? Я обычно делаю так. Пишу элементу id="n{$key}", где $key — ключ цикла. В результате каждый элемент приобретает уникальный id = n0...n1...n2...n3 и тд.

Если надо обработать данный элемент, можно написать onclick="nameYouFunction('{$key}'); return false;", тогда при клике по элементу управление передастся методу с именем nameYouFunction, и методу передастся параметр со строчным значением ключа цикла.

Ну, а дальше ясно — выбираете с помошью js элемент с нужным id и обрабатываете его — получаете значение value или проверяете чекбокс или еще что. И отправляете по аяксу данные в корзину.
#4 31 мая 2019 в 15:29
Юрий, спасибо, всё работает!
#5 1 июня 2019 в 16:18


Олег с клещами, вам надо каждому элементу страницы html присвоить уникальный id, чтобы js работал именно с ним. Ведь если вы пишете, например, $('div')… то js ВСЕ div'ы на странице выбирает.

Как это конкретно сделать, особенно, если список формируется динамически, в цикле? Я обычно делаю так. Пишу элементу id="n{$key}", где $key — ключ цикла. В результате каждый элемент приобретает уникальный id = n0...n1...n2...n3 и тд.

Если надо обработать данный элемент, можно написать onclick="nameYouFunction('{$key}'); return false;", тогда при клике по элементу управление передастся методу с именем nameYouFunction, и методу передастся параметр со строчным значением ключа цикла.

Ну, а дальше ясно — выбираете с помошью js элемент с нужным id и обрабатываете его — получаете значение value или проверяете чекбокс или еще что. И отправляете по аяксу данные в корзину.

Кирилл Эдуардович (Странник)

Здравствуйте, а Вы не знаете как можно цены в инстант шоп которые указаны в долларах, заставить изменяться по курсу от ЦБ? И чтобы рядом с ценой в долларах, была цена в рублях которая тоже изменяется в зависимости от цены в долларах.
#6 1 июня 2019 в 17:21
Dina, наверно, такое сделать можно, если сообразить, как получать данные о курсе рубль/доллар у ЦБ.
Несколько вариантов:
1. Либо писать парсер сайта www.cbr.ru,
2. Либо получать XML и распарсивать www.cbr.ru/development/SXML/
3. Получать данные ЦБ по API www.cbr.ru/development/DWS/
Третий вариант самый надежный — надо разбираться и читать документацию (лично я пока занят другой задачей, не взыщите)

Когда эти данные вашим сайтом будут получаться, в принципе, сделать то, что вы просите, уже просто дело техники. Код магазина открыт.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.