Шаг количества в корзине shopkeeper

Всем привет! Есть интернет-магазин тканей, покупатель, например хочет купить 1,2 метра ткани, а шаг идет по умолчанию в шопкипере 1,2,3… А нужен шаг 0,1, при этом цена задана за 1 метр. Как это сделать и чтобы правильно считало в корзине? И если это сложно, то кто мог бы сделать такой функционал и за сколько?

Нашел на форуме шопкипера похожий вопрос, где разработчик ответил, что попробуйте поменять строчку в файле shopkeeper.js на

var num = action==1 ? count+0.5 : count-0.5;

Но это не помогло.

9 комментариев

avatar
А что если заменить стандартный
<input type="text">
на такое
<input type="number" step="0.1">
avatar
Поглядите здесь. Сделана колбаса в долях, консервы в штуках. Правда, тут правки не только касательно единиц измерения, ещё и переделан выбор количества.
  • 1px
  • 0
avatar
а в каких файлах правки делали?
avatar
похоже что getTotal в class.shopkeeper.php переписали, так как по умолчанию totalItems = count, а на сайте по ссылке кг складывает с кг, а товар с товаром, т.е. 2кг одной колбасы и 3,5 кг другой — это 2 товара, а не 5,5.
avatar
Хорошее решение, тоже интересует.
avatar
Да вспомнить бы, где и как делал. Столько уже времени прошло, сайт был на потоке, быстрей-быстрей.
avatar
Такс. Ну во-первых 2 правки для того, чтобы сделать «плюс-минус».
В custom.js и в shopkeeper.js ищите строки с count_add и count_del, адаптируйте их под себя. Краткая суть. Они ищут атрибут data-ceil и в зависимости от него уже строят логику добавления.
В чанке товара «плюсики» выводим вот так:
<div class="count_wrapper">
    <input class="catalog_count_v" onblur="if(this.value==''){this.value='1'; }" type="text" name="shk-count" value="1" size="2" maxlength="3">
    <div class="count_add" [[if &is=`[+ceil_count+]:is:1` &then=`data-ceil="1"` &else=`data-ceil="0.1"`]]></div>
    <div class="count_del" [[if &is=`[+ceil_count+]:is:1` &then=`data-ceil="1"` &else=`data-ceil="0.1"`]]></div>



Где ceil_count — ТВ-параметр типа чекбокс под названием «Только поштучно?» и значением «Да==1».
В class.shopkeeper заменил «allowFloatCount» => true
В функции getCartContent удалил строку
$purchases = unserialize($_SESSION['purchases']);

Количество товара вывожу плагином на событие OnSHKcalcTotalPrice
$e = &$modx->Event;
$output = "";
if($e->name=='OnSHKcalcTotalPrice'){
	$modx->setPlaceholder('shop_clear_count',count($purchases)); 
	$e->output($output);
}

Этот плейсхолдер shop_clear_count мы юзаем в корзине.
Больше изменений в этом файле нет, не знаю, как и помочь ещё, тем более это редкостные костыли, и вся логика «плюс-минус» ещё и дублируется для корзины и для страниц товара. Но там были возможные доработки, пришлось сделать именно так.
avatar
Спасибо огромное!
Кое-что уже и сам подразобрался.
Плюсики в шаблоне сделал чуть по другому:
Сделал TV-radio edizm с возможными значениями шт==1||кг==0.1 и в шаблоне, соответственно
<div class="count_wrapper">
<input class="catalog_count_v" type="text" name="shk-count" value="1.0" size="3" maxlength="3">
<div class="count_add" data-ceil="[*edizm*]"></div>
<div class="count_del" data-ceil="[*edizm*]"></div>
</div>

А вот до allowFloatCount, что править нужно именно в файле, доходило долго, пытался параметром разрешить заказ дробного товара, но похоже этот параметр только в REVO срабатывает.
Ну а костыли — куда же без них))
На дублирование внимание тоже обратил, погляжу, может получится устранить…
avatar
Вот здесь есть решение, чтобы в сокращенной корзине считало поколичеству товаров, а не по количеству кг или метров
modx.im/blog/questions/1504.html
Вот как еще сделать чтобы дробное число (количесво, например 5,5 м) умножало на стоимость одного м?
  • paic
  • +1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.