Дробное количество товара Minishop2
Всем привет.
Подскажите пожалуйста, на правильном ли я пути, и правильная ли логика?
Есть интернет-магазин на minishop2.
Цена за товар указывается в метрах.
Минимальное количество товара для покупки 0.1 метра.
Дефолтное поле «Количество» завязано на целых числах, для его изменения нужно вносить правки в ядро: (Подробнее modx.pro/help/3991).
От этого варианта я решил отказаться.
Решил через плагины.
Создаем своё поле и выводим его вместо в форме карточки товара.
Перед добавлением товара — msOnBeforeAddToCart
Перед формированием заказа — msOnBeforeCreateOrder
Пока в голове только такое решение:
Через ajax на форме записывать значение в сессию. В плагине читать эту сессию.
На странице корзины
Из сессии берем значение метража, если сессии нет, то выставляем значение 1.
На какое событие лучше повесить изменение цены на странице корзины?
Верна ли моя логика? Буду рад любой подсказке, спасибо.
Подскажите пожалуйста, на правильном ли я пути, и правильная ли логика?
Есть интернет-магазин на minishop2.
Цена за товар указывается в метрах.
Минимальное количество товара для покупки 0.1 метра.
Дефолтное поле «Количество» завязано на целых числах, для его изменения нужно вносить правки в ядро: (Подробнее modx.pro/help/3991).
От этого варианта я решил отказаться.
Решил через плагины.
Создаем своё поле и выводим его вместо в форме карточки товара.
<input class="input" type="number" value="0.1" step="0.1" min="0" max="100">
Создаем плагин на 2 события:Перед добавлением товара — msOnBeforeAddToCart
Перед формированием заказа — msOnBeforeCreateOrder
<?php
switch ($modx->event->name) {
case 'msOnBeforeAddToCart':
$areaProduct = "значение метража"
$new_price = $product->get('price') * $areaProduct;
$product->set('price', $new_price);
break;
}
как получать значение поля метраж из формы$areaProduct?Пока в голове только такое решение:
Через ajax на форме записывать значение в сессию. В плагине читать эту сессию.
На странице корзины
Из сессии берем значение метража, если сессии нет, то выставляем значение 1.
На какое событие лучше повесить изменение цены на странице корзины?
Верна ли моя логика? Буду рад любой подсказке, спасибо.
Комментарии: 4
можно и без внесения изменений в ядро
- расширить класс корзины msCartHandler — изменить метод add ($count сделать дробным)
- расширить модель msOrderProduct — здесь пример, делать по аналогии
Есть еще вариант перевести метры в сантиметры и не усложнять себе жизнь, но на фронте где нужно, записывать их как метры (если это критично).
Т.е дефолтное поле «количество товара» не трогаем, используем значения в поле «count» 10,20,30 (см).
А на странице «Корзины» получаем плагином цену товара и делим её на 100?
На какое событие нужно писать плагин?
Плагином нужно менять стоимость товара? или стоимость заказа?
А на странице «Корзины» получаем плагином цену товара и делим её на 100?
На какое событие нужно писать плагин?
Плагином нужно менять стоимость товара? или стоимость заказа?
Я исхожу из того, что у вас описано в вопросе, что у вас там еще накручено дополнительно, я не знаю и знать не могу, поэтому это уже вам решать. Написано было, что количество задается метрами, без всяких count. А следовательно можно купить либо 0.5 м либо 1.5 метра. Это дроби, но ничего не мешает указывать в поле количество сантиметры, как и цену выставить за сантиметр, тогда вообще ничего менять не нужно, кроме форматирования на сайте (там да, нужно будет цифры разделить на 100, цену — уможить на 100).
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.