Счетчик Кол-Ва Товара
#241
Отправлено 04 Сентябрь 2013 - 04:42
Стрелки у меня есть и они уже отлично работают, поэтому можно пожертвовать ручным вводом в поле количества, если так будет проще и лучше, конечно...
#242
Отправлено 04 Сентябрь 2013 - 06:30
#243
Отправлено 04 Сентябрь 2013 - 12:24
Добавила стрелочки для счетчиков товара в корзине и быстром заказе. В корзине все работает отлично, при изменении количества как стрелочками так и вручную сумма пересчитывается. Но возникла проблема с формой быстрого заказа. При изменении количества товара в форме быстрого заказа и стрелками и вручную, форма закрывается и перекидывает в корзину Как исправить данную ошибку?
Так выглядит код изменения количества в форме быстрого заказа:
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(-1, this)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2" onkeyup="if(parseInt($(this).val()))$(this).closest('form').submit();"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this)" /> </div> </td>Таким методом происходил пересчет суммы в форме быстрого заказа до добавления стрелочек счетчика:
$(function() { $('#nyroModalWrapper .cell3 input').live('change', function() { if(parseInt($(this).val()) >= 1) { var serialize = $(this).closest('form').serializeArray(); $.post('/cart', serialize, $.proxy(function(html) { var serialize = $(this).closest('form').serializeArray(); serialize.push({'name': 'ajax_q', 'value': 1}); serialize.push({'name': 'fast_order', 'value': 1}); $.post('/cart/add', serialize, function(html) { $('#nyroModalContent').html(html); }); }, this)); } }); });
#244
Отправлено 05 Сентябрь 2013 - 04:43
kmt (04 Сентябрь 2013 - 04:42) писал:
Добавьте в файл main.js следующий код
function addone_new(i, btn) { var el = $(btn).closest('.numeric_input').find('[name="form[goods_mod_quantity]"]'); el.val(parseInt(el.val())+i); if(parseInt(el.val()) <= 0){el.val(1);} el.trigger('change'); } $(function() { if($('.goodsDataMainModificationsBlockProperty .title').length) { $('.goodsDataMainModificationDataBlock .numeric_input [name="form[goods_mod_quantity]"]').val(1) .change(function() { $('.goodsDataMainModificationsBlockProperty .title').each(function() { if($.trim($(this).text()).indexOf('Вес упаковки, кг') !== -1) { var block = $(this).closest('.goodsDataMainModificationDataBlock'); var input = block.find('#quantity_wanted'); var size = parseFloat($.trim($(this).next().find('select').text()).replace(',', '.')); if(!block.find('.quantity').length) { input.before(input.clone(false) .removeAttr('name').removeAttr('id') .addClass('quantity').attr('readonly', true) ).hide(); } var quantity = block.find('.quantity'); if(!parseInt(input.val())) { input.val(1); } quantity.val(((parseInt(input.val()) * size) + '').replace('.', ',')); } }); }).trigger('change'); } });
далее в шаблоне "Товар" найдите
addone(1)
и замените на
addone_new(1, this)
далее найдите
addone_new(1, this)
Данный код будет работать только в товаре, для каталога необходим дополнительный код.
#245
Отправлено 05 Сентябрь 2013 - 04:49
Mikhaylova (04 Сентябрь 2013 - 12:24) писал:
Добавила стрелочки для счетчиков товара в корзине и быстром заказе. В корзине все работает отлично, при изменении количества как стрелочками так и вручную сумма пересчитывается. Но возникла проблема с формой быстрого заказа. При изменении количества товара в форме быстрого заказа и стрелками и вручную, форма закрывается и перекидывает в корзину Как исправить данную ошибку?
Так выглядит код изменения количества в форме быстрого заказа:
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(-1, this)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2" onkeyup="if(parseInt($(this).val()))$(this).closest('form').submit();"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this)" /> </div> </td>Таким методом происходил пересчет суммы в форме быстрого заказа до добавления стрелочек счетчика:
$(function() { $('#nyroModalWrapper .cell3 input').live('change', function() { if(parseInt($(this).val()) >= 1) { var serialize = $(this).closest('form').serializeArray(); $.post('/cart', serialize, $.proxy(function(html) { var serialize = $(this).closest('form').serializeArray(); serialize.push({'name': 'ajax_q', 'value': 1}); serialize.push({'name': 'fast_order', 'value': 1}); $.post('/cart/add', serialize, function(html) { $('#nyroModalContent').html(html); }); }, this)); } }); });
Вам необходимо код
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(-1, this)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2" onkeyup="if(parseInt($(this).val()))$(this).closest('form').submit();"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this)" /> </div> </td>
заменить на
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(-1, this)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this)" /> </div> </td>
#246
Отправлено 05 Сентябрь 2013 - 05:20
Сake (05 Сентябрь 2013 - 04:49) писал:
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(-1, this)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2" onkeyup="if(parseInt($(this).val()))$(this).closest('form').submit();"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this)" /> </div> </td>
заменить на
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(-1, this)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this)" /> </div> </td>
Код заменила, но ничего не изменилось, при изменении количества в форме быстрого заказа она закрывается и открывается страница корзины.
#247
Отправлено 05 Сентябрь 2013 - 06:37
Vaccina (05 Сентябрь 2013 - 04:43) писал:
function addone_new(i, btn) { var el = $(btn).closest('.numeric_input').find('[name="form[goods_mod_quantity]"]'); el.val(parseInt(el.val())+i); if(parseInt(el.val()) <= 0){el.val(1);} el.trigger('change'); } $(function() { if($('.goodsDataMainModificationsBlockProperty .title').length) { $('.goodsDataMainModificationDataBlock .numeric_input [name="form[goods_mod_quantity]"]').val(1) .change(function() { $('.goodsDataMainModificationsBlockProperty .title').each(function() { if($.trim($(this).text()).indexOf('Вес упаковки, кг') !== -1) { var block = $(this).closest('.goodsDataMainModificationDataBlock'); var input = block.find('#quantity_wanted'); var size = parseFloat($.trim($(this).next().find('select').text()).replace(',', '.')); if(!block.find('.quantity').length) { input.before(input.clone(false) .removeAttr('name').removeAttr('id') .addClass('quantity').attr('readonly', true) ).hide(); } var quantity = block.find('.quantity'); if(!parseInt(input.val())) { input.val(1); } quantity.val(((parseInt(input.val()) * size) + '').replace('.', ',')); } }); }).trigger('change'); } });
Шаблон и скрипт с изменениями прилагаются:
Vaccina (05 Сентябрь 2013 - 04:43) писал:
addone_new(1, this)
Vaccina (05 Сентябрь 2013 - 04:43) писал:
addone(1)
и замените на
addone_new(1, this)
Vaccina (05 Сентябрь 2013 - 04:43) писал:
Vaccina (04 Сентябрь 2013 - 01:53) писал:
Да, ещё одно наблюдение:
Когда стрелочки некорректно работали в каталоге (нажимаешь их в любом товаре, меняется только в первом) - в поле можно было ввести количество вручную.
После вчерашнего изменения шаблона стрелочки работают, но нет возможности изменять количество товара вручную.
Если реализуется возможность отображения минимального веса со значения модификации в поле количества (ну, Вы поняли), то лично для меня это неактуально.
Я просто отметил - так, для истории; вдруг, кто будет прописывать себе эти коды для стрелочек...
UPDATE:
8) Ошибка! При нажатии стрелок в поле отображается количество согласно значению модификации, но в корзину отправляет количество раз нажатых на стрелку.
Пример: товар весом 1,5 кг > нажал четыре раза > в поле отображается 6 кг > в корзину добавилось 4 кг.
UPDATE2:
В итоге, в выпадающем списке значений(на странице товара) активны только последние добавленые, но считает вес с первым значениям, цена отображается с последнего, в корзину отправляет количество кликов по стрелке
п.с. первые модификации и значения:
тип упаковки: стретч-плёнка / вес упаковки, кг: 1,2 / цена: 28,50
последние модификации и значения:
тип упаковки: нефасованная / вес упаковки, кг: 20 / цена: 27,00
п.п.с. В каталоге товаров цена также взята с последней модификации, здесь то как происходит условие "Цена сейчас"?, чтобы
Ну да ладно пока что с этими дополнительными значениями, сейчас главное разобраться с ошибкой #8 и добавление функции мин. веса упаковки в каталог.
#248
Отправлено 05 Сентябрь 2013 - 08:10
Mikhaylova (05 Сентябрь 2013 - 05:20) писал:
Mikhaylova, попробуйте вот этот код вставить - должно заработать!
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(this, -1)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(this, 1)" /> </div> </td>
#249
Отправлено 05 Сентябрь 2013 - 17:40
kmt (05 Сентябрь 2013 - 08:10) писал:
<td class="cell3"> <div class="numeric_input"> <input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(this, -1)" /> <input type="text" style="width:20px;" class="text_q" name="form[quantity][{cart_items.GOODS_MOD_ID}]" id="quantity_wanted" value="{cart_items.ORDER_LINE_QUANTITY}" title="Количество" maxlength="2"/> <input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(this, 1)" /> </div> </td>
К сожалению не помогает, при попытке изменить количество все также перекидывает в корзину.
#250
Отправлено 05 Сентябрь 2013 - 18:22
Просто добавьте стрелочки в каталог (шаблон Товары).
Перед нажатием кнопки "Быстрый заказ" покупатель сразу выбирает необходимое ему количество... Разве не логично?
А кому нужно по простому, так в корзине пересчёт работает.
п.с. Я лично, никогда не пользуюсь формами быстрого заказа, привык контролировать весь процесс и условия, пусть я даже не первый раз покупаю в этом магазине.
Обнаружил у Вас ещё ошибку:
Страница Товары (каталог) > нажимаю "В корзину" > во всплывающем окне выбираю "Быстрый заказ" > ошибка
#251
Отправлено 05 Сентябрь 2013 - 22:09
Жаль что так и не удалось обнаружить и исправить причину ошибок, а выбирать метода прямо противоположенные тому ради чего добавлялись стрелочки для количеств и форма быстрого заказа.
#252
Отправлено 05 Сентябрь 2013 - 23:11
1) Вам нужно только добавить в шаблон Товары, в блок Таблица кнопку "В корзину" (как в блоке Список)
2) В этом же шаблоне Товары, добавьте поле количество со стрелочками над кнопкой "Быстрый заказ" (в обеих блоках - Таблица и Список). В блоке Таблица само слово Количество перед полем количества не прописывайте.
3) И реализуйте до конца функцию быстрого заказа в шаблоне Товар - кнопка есть - товар не добавляет.
И будет всё у Вас отлично, поверьте.
Выбрал количество > нажал Быстрый заказ - делов-то!
п.п.с. Не забудьте про шаблон Просмотр акции, если он у Вас имеется.
Удачи!
#253
Отправлено 06 Сентябрь 2013 - 05:37
Mikhaylova (05 Сентябрь 2013 - 05:20) писал:
По всей видимости в функции addone нет return false что не дает сделать отправку формы. Вы можете попробовать строку
<input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this)" />
заменить на
<input type="image" src="{ASSETS_IMAGES_PATH}bg_up.png" class="strelka" onclick="addone(1, this);return(false);" />
а так же строку
<input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(this, -1)" />
заменить на
<input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(this, -1); return(false);" />
Если вы убрали уже данные стрелки, то вы можете попробовать восстановить шаблон из резервной копии и поделать данное изменение. Вам не нужно было торопиться с полным удалением стрелок, можно было бы их просто скрыть задав стиль style="display: none;" например
<input type="image" src="{ASSETS_IMAGES_PATH}bg_down.png" class="strelka" onclick="addone(this, -1)" style="display: none;" />
#255
Отправлено 06 Сентябрь 2013 - 06:21
Цитата
Да, я обратила на это внимание. Прошу прощенья вероятно я что-то все же напутала. В корзину можно положить и не целое значение в том случае если модификация является весовой или другой ед. измерения которая не представляет из себя целое число. Необходимо будет изменить в таком случае логику, убрав лишнее и добавив необходимый код.
Замените ранее добавленный код в main.js на следующий
function addone_new(i, btn) { var el = $(btn).closest('.numeric_input').find('[name="form[goods_mod_quantity]"]'); el.attr('rel', (parseInt(el.attr('rel'))+i)); if(parseInt(el.attr('rel')) <= 0){el.attr('rel', 1);} el.trigger('change'); } $(function() { if($('.goodsDataMainModificationsBlockProperty .title').length) { $('.goodsDataMainModificationDataBlock .numeric_input [name="form[goods_mod_quantity]"]').attr('rel', 1) .change(function() { $('.goodsDataMainModificationsBlockProperty .title').each(function() { if($.trim($(this).text()).indexOf('Вес упаковки, кг') !== -1) { var block = $(this).closest('.goodsDataMainModificationDataBlock'); var input = block.find('#quantity_wanted'); var size = parseFloat($.trim($(this).next().find('select').text()).replace(',', '.')); if(!parseInt(input.attr('rel'))) { input.attr('rel', 1); } input.val(((parseInt(input.attr('rel')) * size) + '').replace('.', ',')); } }); }).trigger('change'); } });
Для шаблона "Товары" - найдите в шаблоне 2 строки
<form action="{CART_ADD_GOODS_MODIFICATION_URL | url_amp}" method="post" id="goodsListFormId{goods.MIN_PRICE_NOW_ID}" class="goodsListForm">
и после каждой найденной строки - вставьте
<div style="display: none;" class="goods_modifications_properties"> {% FOR mods %} <div class="goodsDataMainModificationsBlockProperty"> {%FOR v %} {% IF goods.mods.v.first %} <div class="title">{goods.mods.v.NAME}</div> <div class="value">{goods.mods.v.VALUE}</div> {% ENDIF %} {% ENDFOR %} </div> {% ENDFOR %} </div>
после данных изменений можно будет реализовать javascript код. Как выполните изменения - напишите.
#256
Отправлено 06 Сентябрь 2013 - 17:58
товар 1,8 кг х 3 = 5,4 > нажимаю в корзину > перехожу в корзину > товар 5 кг
Vaccina (06 Сентябрь 2013 - 06:21) писал:
Выполнил...
#257
Отправлено 07 Сентябрь 2013 - 03:57
input.val(((parseInt(input.attr('rel')) * size) + '').replace('.', ','));
и заменить на
input.val(((parseInt(input.attr('rel')) * size) + ''));
Так же в шаблоне "Товары" найдите ранее добавленный код
<div style="display: none;" class="goods_modifications_properties"> {% FOR mods %} <div class="goodsDataMainModificationsBlockProperty"> {%FOR v %} {% IF goods.mods.v.first %} <div class="title">{goods.mods.v.NAME}</div> <div class="value">{goods.mods.v.VALUE}</div> {% ENDIF %} {% ENDFOR %} </div> {% ENDFOR %} </div>
и замените на
<div style="display: none;" class="goods_modifications_properties"> {% FOR mods %} <div class="goodsDataMainModificationsBlockProperty"> {%FOR v %} <div class="title">{goods.mods.v.NAME}</div> <div class="value">{goods.mods.v.VALUE}</div> {% ENDFOR %} </div> {% ENDFOR %} </div>
так как в данное условие которое использовалось - не попадала модификация "Вес упаковки, кг".
#258
Отправлено 07 Сентябрь 2013 - 04:13
Vaccina (07 Сентябрь 2013 - 03:57) писал:
input.val(((parseInt(input.attr('rel')) * size) + '').replace('.', ','));
и заменить на
input.val(((parseInt(input.attr('rel')) * size) + ''));
Vaccina (07 Сентябрь 2013 - 03:57) писал:
Товары.html 15,95К 441 Количество загрузок:
#259
Отправлено 07 Сентябрь 2013 - 04:18
Цитата
товар 1,8 кг х 3 = 5,4 > нажимаю в корзину > перехожу в корзину > товар 5 кг
Попробуйте очистить кэш в вашем браузере, так как у вас дробное весовое число товара добавляется в корзину.
Если вы о
Цитата
То на данный момент теперь все в порядке, и необходимая модификация содержится в шаблоне.
#260
Отправлено 07 Сентябрь 2013 - 04:32
Vaccina (07 Сентябрь 2013 - 04:18) писал:
Попробуйте очистить кэш в вашем браузере, так как у вас дробное весовое число товара добавляется в корзину.
Если вы о
То на данный момент теперь все в порядке, и необходимая модификация содержится в шаблоне.
На странице Товары (Таблица, Список) по прежнему отображается "1"
Товары.html 15,95К 511 Количество загрузок:
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных