Адекватное изменение количества товаров в корзине

  • 19 Ответов
  • 838 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

st_jimmy96

  • Осваиваюсь на форуме
  • ***
  • 47
  • 3
Больше года я не пользовался ВиртуМартом и тут приспичило. Какой все-даки он ущербный... Ну да ладно не об этом.
Меня всегда напрягал способ изменения количества товара, при оформлении, в корзине. Это ж как не удобно надо сначала ввести количество, а потом кнопку жать.
Решил проблему по своему:
идем в components\com_virtuemart\views\cart\tmpl\default_pricelist.php
Ищем там:
Код
<input type="text"
   onblur="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   onclick="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   onchange="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   onsubmit="Virtuemart.checkQuantity(this,<?php echo $step?>,'<?php echo vmText::_ ('COM_VIRTUEMART_WRONG_AMOUNT_ADDED')?>');"
   title="<?php echo  vmText::_('COM_VIRTUEMART_CART_UPDATE')?>" class="quantity-input js-recalculate" size="3" maxlength="4" name="quantity[<?php echo $pkey; ?>]" value="<?php echo $prow->quantity ?>" />
Дописываем перед ним: <span class="plusminus"><a class="prplus">+</a>
после него: <a class="prminus">-</a>
И после кнопок:
<button type="submit" class="vmicon vm2-add_quantity_cart" name="updatecart.<?php echo $pkey ?>" title="<?php echo  vmText::_ ('COM_VIRTUEMART_CART_UPDATE')?>" />
<button type="submit" class="vmicon vm2-remove_from_cart" name="delete.<?php echo $pkey ?>" title="<?php echo vmText::_ ('COM_VIRTUEMART_CART_DELETE')?>" />
Закрываем наш спан: </span>
Далее в удобном месте шаблона прописываем код:
Код
	$(function(){
$('a.prminus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) - 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
$('a.prplus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) + 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
});
CSSом допиливаем по своему усмотрению.

*

fsv

  • Moderator
  • *****
  • 2506
  • 367
Так вы при нажатии на "-" загоните значение количества в "меньше нуля". Дописать проверку на ноль надо.
И вы же переменной присвоили значение - "какой-то инпут". Используйте переменную, зачем еще раз тот же элемент искать в DOM?
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

st_jimmy96

  • Осваиваюсь на форуме
  • ***
  • 47
  • 3
Действительно скрипт можно поправить. На счет проверки на ноль - нет необходимости, при значении меньше 1, товар удаляется из корзины. :)

*

fsv

  • Moderator
  • *****
  • 2506
  • 367
На счет проверки на ноль - нет необходимости, при значении меньше 1, товар удаляется из корзины.
Вот так юзер решит почпокать кнопочками, разгонится и промажет, товар удалится, ему расстройство и закрытие вкладки вашего сайта, вам не полученная прибыль. Проверка на ">=1", удаляет (если захочет) кнопкой.
Заказать разработку:    расширения Joomla  |   интерфейсы на javascript(jQuery)  |  мобильные приложения

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
Далее в удобном месте шаблона прописываем код:
Код
	$(function(){
$('a.prminus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) - 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
$('a.prplus').click(function() {
var $input = $(this).parent(this).children("input");
var count = parseInt($input.val()) + 1;
$(this).parent(this).children("input").val(count);
$(this).parent(this).children(".vm2-add_quantity_cart").click();
});
});
CSSом допиливаем по своему усмотрению.

Подскажите пож-та. где именно надо прописывать.
Вписал после span - не работает.

*

st_jimmy96

  • Осваиваюсь на форуме
  • ***
  • 47
  • 3
Перед кодом напишите <script> а после </script> и будет счастье

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
сделал. и ничего не работает

*

st_jimmy96

  • Осваиваюсь на форуме
  • ***
  • 47
  • 3
Вставлять скрипт нужно перед <span>
Попробуйте вставить в шапку (<head></head>). Проверьте подключен ли у Вас jquery

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
Вставлять скрипт нужно перед <span>
Попробуйте вставить в шапку (<head></head>). Проверьте подключен ли у Вас jquery
прописал в head. jquery прописал.
udodobno.ru - вот тут на сайте посмотрите пож-та.

*

st_jimmy96

  • Осваиваюсь на форуме
  • ***
  • 47
  • 3
Все дело в том, что Вы вставили код ДО подключения JQuery. Переместите кусок кода в конец поля head

*

st_jimmy96

  • Осваиваюсь на форуме
  • ***
  • 47
  • 3
Должен заметить, этот скрипт может менять количество товара на 1 единицу. К примеру у Вас задан шаг 500шт.. Я бы переделал это таким образом:
заказ 1 упаковка = 500шт. Минимальный заказ 4 упаковки.

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
Все дело в том, что Вы вставили код ДО подключения JQuery. Переместите кусок кода в конец поля head
Поставил. и ничего не изменилось.

*

robert

  • Профи
  • ********
  • 4005
  • 371
Поставил. и ничего не изменилось.
Не удивительно, у вас же другой шаблон.
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
            el=$(this).parent().prev().find('.quantity-input'),
            step=el.attr('step') || 1,
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]*step
;
val=val<step?step:val;
el.val(val);
});
});
http://jsfiddle.net/n_robert/uyqh8j9a
st_jimmy96, что за "parent(this)"?
« Последнее редактирование: 29.10.2015, 15:44:57 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
Не удивительно, у вас же другой шаблон.
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
el=$(this).parent().prev().find('.quantity-input'),
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]
;
val=val<0?0:val;
el.val(val);
});
});
http://jsfiddle.net/n_robert/uyqh8j9a
st_jimmy96, что за "parent(this)"?

Все прописал опять же. И не работают кнопки. Может потому что в вашем случае шаг в 1 ед товара. а у меня настроены другие?

*

robert

  • Профи
  • ********
  • 4005
  • 371
Добавил учет шага.
Мой пример взят из вашего кода, и он работает.
Попробуйте заменить "$" на "jQuery".

P.S. Только сейчас заметил: у вас и так уже все работает, зачем еще что-то менять?
« Последнее редактирование: 29.10.2015, 15:42:40 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
Добавил учет шага.
Мой пример взят из вашего кода, и он работает.
Попробуйте заменить "$" на "jQuery".

P.S. Только сейчас заметил: у вас и так уже все работает, зачем еще что-то менять?

Вы в корзине это смотрите ?
Потому что у меня не работает

*

robert

  • Профи
  • ********
  • 4005
  • 371
Вы в корзине это смотрите ?
Нет, не в корзине :(.
Исправил:
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
el=$(this).parent().prev('.quantity-input'),
step=parseInt(el.attr('onblur').replace(/[^\d]/g,'')) || 1,
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]*step
;
val=val<step?step:val;
el.val(val);
$(this).parent().nextAll('span').filter('.vm2-add_quantity_cart').first().click();
});
});
« Последнее редактирование: 29.10.2015, 17:19:16 от robert »
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
Нет, не в корзине :(.
Исправил:
Код: javascript
$(function(){
$('.quantity-plus,.quantity-minus').on('click',function() {
var
signs={'quantity-plus':1,'quantity-minus':-1},
el=$(this).parent().prev('.quantity-input'),
step=parseInt(el.attr('onblur').replace(/[^\d]/g,'')) || 1,
cls=$(this).attr('class'),
cl=cls.substring(cls.indexOf(' ')).trim(),
val=parseInt(el.val())+signs[cl]*step
;
val=val<step?step:val;
el.val(val);
$('#checkoutForm').submit();
});
});

а проблема как раз с изменением количества в корзине)
этот скрипт прописал. и не работает (

*

robert

  • Профи
  • ********
  • 4005
  • 371
Чуть-чуть изменил последнюю строку.
Пример работает, у вас, видимо конфликт скриптов.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

lalalag

  • Осваиваюсь на форуме
  • ***
  • 125
  • -3
Чуть-чуть изменил последнюю строку.
Пример работает, у вас, видимо конфликт скриптов.

не могли бы вы посмотреть на сайте в чем проблема? плз. можно по скапу связаться с вами. за оплату допилить эту мелочь?