Форум русской поддержки Joomla!® CMS
03.12.2016, 15:42:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 531 раз)
0 Пользователей и 1 Гость смотрят эту тему.
st_jimmy96
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 47


« : 17.09.2015, 10:14:32 »

Больше года я не пользовался ВиртуМартом и тут приспичило. Какой все-даки он ущербный... Ну да ладно не об этом.
Меня всегда напрягал способ изменения количества товара, при оформлении, в корзине. Это ж как не удобно надо сначала ввести количество, а потом кнопку жать.
Решил проблему по своему:
идем в 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
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2235


« Ответ #1 : 17.09.2015, 14:59:32 »

Так вы при нажатии на "-" загоните значение количества в "меньше нуля". Дописать проверку на ноль надо.
И вы же переменной присвоили значение - "какой-то инпут". Используйте переменную, зачем еще раз тот же элемент искать в DOM?
Записан
st_jimmy96
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 47


« Ответ #2 : 17.09.2015, 15:30:06 »

Действительно скрипт можно поправить. На счет проверки на ноль - нет необходимости, при значении меньше 1, товар удаляется из корзины. Azn
Записан
fsv
Moderator
*****

Репутация: +330/-2
Offline Offline

Пол: Мужской
Сообщений: 2235


« Ответ #3 : 17.09.2015, 15:40:07 »

На счет проверки на ноль - нет необходимости, при значении меньше 1, товар удаляется из корзины.
Вот так юзер решит почпокать кнопочками, разгонится и промажет, товар удалится, ему расстройство и закрытие вкладки вашего сайта, вам не полученная прибыль. Проверка на ">=1", удаляет (если захочет) кнопкой.
Записан
lalalag
Осваиваюсь на форуме
***

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #4 : 13.10.2015, 19:39:46 »

Далее в удобном месте шаблона прописываем код:
Код:
$(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
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 47


« Ответ #5 : 15.10.2015, 08:39:45 »

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

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #6 : 15.10.2015, 08:59:13 »

сделал. и ничего не работает
Записан
st_jimmy96
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Сообщений: 47


« Ответ #7 : 15.10.2015, 09:46:16 »

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

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #8 : 16.10.2015, 18:34:42 »

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

Репутация: +3/-0
Offline Offline

Сообщений: 47


« Ответ #9 : 27.10.2015, 09:32:12 »

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

Репутация: +3/-0
Offline Offline

Сообщений: 47


« Ответ #10 : 27.10.2015, 09:37:14 »

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

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #11 : 28.10.2015, 10:37:20 »

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

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #12 : 28.10.2015, 11:38:10 »

Поставил. и ничего не изменилось.
Не удивительно, у вас же другой шаблон.
Код
$(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, 14:44:57 от robert » Записан
lalalag
Осваиваюсь на форуме
***

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #13 : 29.10.2015, 14:15:27 »

Не удивительно, у вас же другой шаблон.
Код
$(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
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #14 : 29.10.2015, 14:31:23 »

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

P.S. Только сейчас заметил: у вас и так уже все работает, зачем еще что-то менять?
« Последнее редактирование: 29.10.2015, 14:42:40 от robert » Записан
lalalag
Осваиваюсь на форуме
***

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #15 : 29.10.2015, 14:59:02 »

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

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

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

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #16 : 29.10.2015, 15:13:44 »

Вы в корзине это смотрите ?
Нет, не в корзине Sad.
Исправил:
Код
$(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, 16:19:16 от robert » Записан
lalalag
Осваиваюсь на форуме
***

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #17 : 29.10.2015, 15:48:34 »

Нет, не в корзине Sad.
Исправил:
Код
$(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
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3567


« Ответ #18 : 29.10.2015, 15:52:36 »

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

Репутация: +0/-3
Offline Offline

Сообщений: 98


« Ответ #19 : 29.10.2015, 16:08:08 »

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

не могли бы вы посмотреть на сайте в чем проблема? плз. можно по скапу связаться с вами. за оплату допилить эту мелочь?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet