Перейти к содержимому


Как сделать автоматический пересчет суммы в корзине?


  • Вы не можете ответить в тему
Сообщений в теме: 15

#1 temnii

    Пользователь

  • Пользователи
  • PipPip
  • 20 сообщений
Репутация: 1
Начинающий

Отправлено 30 May 2011 - 10:57 AM

Файл core/tpl/user/default/shopping_cart.tpl.html

находим код


{if $session_items}
<input type="text" name="count_{$session_items[i]}" size="5" value="{$cart_content[i].quantity}">
{else}
<input type="text" name="count_{$cart_content[i].id}" size="5" value="{$cart_content[i].quantity}">
{/if}


и, добавляя событие onChange для текстового поля, содержащего количество товара, меняем на такой код


{if $session_items}
<input type="text" name="count_{$session_items[i]}" size="5" value="{$cart_content[i].quantity}" onchange="document.getElementById('formppl').submit(); return false">
{else}
<input type="text" name="count_{$cart_content[i].id}" size="5" value="{$cart_content[i].quantity}" onchange="document.getElementById('formppl').submit(); return false">
{/if}


И, соответственно, отпадает необходимость в ссылке "Пересчитать сумму заказа", уберем ее

удалите код
  |  <a href="#" onclick="document.getElementById('formppl').submit(); return false">{$smarty.const.UPDATE_BUTTON}</a>

  • 1

#2 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 26 August 2011 - 09:23 AM

При любом клике, по любому месту, в том числе и ссылке Оформить заказ сумма пересчитывается. Просто изначально люди ждут, когда на глазах сумма сама пересчитается. Но это не совсем так.
  • 0

#3 Matit

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 104 сообщений
Репутация: 2
Начинающий

Отправлено 05 September 2011 - 07:53 PM

А если использовать onKeyUp вместо onChange? Пересчитывается моментально и никуда нажимать не надо!
  • 1
Все "спасибо" в репутацию :)

#4 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 05 September 2011 - 08:55 PM

Да, точно поставил попробовал, все работает, как и должно быть. Да, полезно не зацикливаться и иногда почитывать информацию даже по javascript.
Событие onkeyup происходит в момент отпускания нажатой клавиши. Получается пересчет происходит, когда отпускается клавиша цифры, которую вбивают в поле количества. Спасибо. Это значительно лучше, чем было.
  • 0

#5 R.Sergey

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

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 18 September 2011 - 11:33 AM

А если использовать onKeyUp вместо onChange? Пересчитывается моментально и никуда нажимать не надо!


Верно, но при этом появляется ИМХО очень огромный минус. Попробуйте стереть кол-во или поставить "0". Товар сразу же исчезнет из корзины.

А знаете ли Вы что большая часть неопытных пользователей перед тем как изменять кол-во товаров в корзине сначала сотрут предыдущую цифру ???
Поэтому как мне кажется лучше уж "onChange" - сумма не пересчитается на глазах, но хотя бы не будет подобных неудобств для пользователей.
  • 0

#6 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 20 September 2011 - 07:55 PM

Верно, но при этом появляется ИМХО очень огромный минус. Попробуйте стереть кол-во или поставить "0". Товар сразу же исчезнет из корзины.

А знаете ли Вы что большая часть неопытных пользователей перед тем как изменять кол-во товаров в корзине сначала сотрут предыдущую цифру ???
Поэтому как мне кажется лучше уж "onChange" - сумма не пересчитается на глазах, но хотя бы не будет подобных неудобств для пользователей.


Да если все оставить как есть, но если немного поразмышлять, то можно это исправить. Я на скорую руку сделал приведенное решение. Конечно можно с регулярным выражением замутить, но вот это тоже работает:

Берем код где у нас событие onKeyUp
В шаблон core/tpl/user/default/shopping_cart.tpl.html
вставляем следующий код:


{if $session_items}
<input type="text" name="count_{$session_items[i]}" size="1" value="{$cart_content[i].quantity}" onKeyUp="return check_submit_value(this);">
{else}
<input type="text" name="count_{$cart_content[i].id}" size="1" value="{$cart_content[i].quantity}" onKeyUp="return check_submit_value(this);">
{/if}


Затем где-нибуль в этом же шаблоне вставляем функцию,
например в конце, между
{/if}
тут
{if $this_is_a_popup_cart_window}



<script type="text/javascript">
function check_submit_value(input) {literal}{{/literal}
if (input.value > 0) {literal}{{/literal}
document.getElementById('formppl').submit();
{literal}}{/literal} else {literal}{{/literal}
return false;
{literal}}{/literal}
{literal}}{/literal}
</script>

Обновляем и чистим кеш и проверяем, как работает. Проверял IE8, Opera, Safari, Chrome, FireFox
Если забить цифру пробелом, буквой или 0 ничего не происходит, даже если оформлять заказ, останется то, что было изначально до редактирования количества, но если просто менять цифры то все работает, как и надо :)
  • 0

#7 R.Sergey

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

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 20 September 2011 - 08:54 PM

Если забить цифру пробелом, буквой или 0 ничего не происходит,

а если убрать вообще символы? чтобы поле пустым осталось?
  • 0

#8 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 20 September 2011 - 09:41 PM

а если убрать вообще символы? чтобы поле пустым осталось?


Если пустое поле тоже количество не меняется, пробовал пробелы, буквы, папострофы, кавычки, доллар, точки, запятые, разные знаки. Реагирует только на цифры > 0. В общем нормально работает. Даже если с пустым полем, 0 и другими знаками нажать оформление, то в корзине останется то, что и было до редактирования в этом поле. Т.е. кроме цифры больше 0 ничего не меняет количества. В общем пробуйте, смотрите и наслаждайтесь работой.
  • 0

#9 Dbus

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 1116 сообщений
Репутация: 174
Мастер
  • ГородОдесса

Отправлено 20 September 2011 - 09:42 PM

а если убрать вообще символы? чтобы поле пустым осталось?


Аналогично, там же условие на не пустой инпут input.value > 0
  • 0
502 Bad Gateway

#10 R.Sergey

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

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 20 September 2011 - 09:49 PM

Ну что я могу сказать))) БРАВО.
  • 0

#11 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 20 September 2011 - 09:54 PM

Можно конечно с регулярным выражением и функцией replace, чтоб на глазах выкидывало ненужное.

Но мне кажется как я сделал намного проще, а чем проще тем лучше, тут не та задача, чтобы навороты делать.
В общем пользуйтесь, отлично работает. Все автоматически пересчитывает прямо на глазах.
  • 0

#12 pavel77

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 116 сообщений
Репутация: 10
Начинающий

Отправлено 25 October 2011 - 01:45 AM

Возник вопрос в процессе работы.
Если покупателю нужно заказать кол-во от 1 до 9 - ВСЕ СУПЕР!
Но начали возникать вопросы при закзе от 10 и до... едениц товара - покупатель вводит две цифры (если успевает;)) а пересчет идет по первой.

То что цыфры можно ввести поочереди многие просто недодумывают... тыкают 25 а в корзине 2 ))

Может поможете решить данный вопрос?
  • 0

#13 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 25 October 2011 - 08:40 AM

Возник вопрос в процессе работы.
Если покупателю нужно заказать кол-во от 1 до 9 - ВСЕ СУПЕР!
Но начали возникать вопросы при закзе от 10 и до... едениц товара - покупатель вводит две цифры (если успевает;)) а пересчет идет по первой.

То что цыфры можно ввести поочереди многие просто недодумывают... тыкают 25 а в корзине 2 ))

Может поможете решить данный вопрос?


Я проверил у меня все нормально работает, нареканий ни у кого не было вообще.
В IE работает нормально.

В FireFox посмотрел, действительно проблема есть. Хорошо подумаю как можно исправить.
  • 0

#14 ruter

    Продвинутый пользователь

  • VIP
  • 334 сообщений
Репутация: 151
Мастер

Отправлено 26 October 2011 - 06:40 PM

Эту проблему наскоком не решить. Поскольку событие onKeyUp срабатывает по отпусканию клавиши, а поскольку клавиш с двойными цифрами и более не сушествует, возникает подобная ошибка при отжатии клавиши и работает нестабильно при количествах в два и более разрядов цифр.

У меня например больше, чем три шт одного товара покупок сразу не бывает, в 10 тем более. Меня устраивает этот вариант.

У кого бывает, пока поставьте onChange вместо onKeyUp , пересчет тогда будет по переводу фокуса на любое другое место.

По мере появления свободного времени я займусь этим вопросом и сделаю как надо.

У кого покупки по количеству меньше десяти будет нормально работать.
  • 0

#15 Matit

    Продвинутый пользователь

  • Download User
  • PipPipPip
  • 104 сообщений
Репутация: 2
Начинающий

Отправлено 03 February 2012 - 05:37 PM

Можно запретить ввод любых других символов кроме цифр. Цифры Num Lock разрешены.
Нужно добавить к input-у событие onkeydown:
onkeydown = "javascript: return ((event.keyCode>47)&&(event.keyCode<58)||(event.keyCode>95)&&(event.keyCode<106))"


Работает в Firefox, IE и Chrome. Opera игнорирует его...

И вопрос про onkeyUP:
а если обновлять значение "подождав" немного? Что-то типа время задержки...
Чтобы покупатель успел ввести все количество цифр.
  • 0
Все "спасибо" в репутацию :)

#16 tataruah

    Новичок

  • Пользователи
  • Pip
  • 2 сообщений
Репутация: 2
Начинающий

Отправлено 06 June 2012 - 10:38 AM

а если обновлять значение "подождав" немного? Что-то типа время задержки...

Можно чуть переписав функцию

<script type="text/javascript">
function check_submit_value(input) {literal}{{/literal}
if (input.value > 0) {literal}{{/literal}
window.setTimeout("document.getElementById('formppl').submit();", 1000);
{literal}}{/literal} else {literal}{{/literal}
return false;
{literal}}{/literal}
{literal}}{/literal}
</script>

получится, что при нажатии на одну цифру срабатывает таймер (в данном случае 1 сек.) и если успеваешь набрать еще цифру, функция срабатывает еще раз и у Тебя есть еще секунда и т.д...
  • 2