Дробное количество товара Minishop2

Всем привет.
Подскажите пожалуйста, на правильном ли я пути, и правильная ли логика?

Есть интернет-магазин на 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.
На какое событие лучше повесить изменение цены на странице корзины?

Верна ли моя логика? Буду рад любой подсказке, спасибо.
Глеб
21 мая 2019, 20:27
modx.pro
1 555
0

Комментарии: 4

Артем
22 мая 2019, 09:08
+1
можно и без внесения изменений в ядро
  1. расширить класс корзины msCartHandler — изменить метод add ($count сделать дробным)
  2. расширить модель msOrderProduct — здесь пример, делать по аналогии
    Іван Клімчук
    22 мая 2019, 09:31
    +1
    Есть еще вариант перевести метры в сантиметры и не усложнять себе жизнь, но на фронте где нужно, записывать их как метры (если это критично).
      Глеб
      23 мая 2019, 11:29
      0
      Т.е дефолтное поле «количество товара» не трогаем, используем значения в поле «count» 10,20,30 (см).

      А на странице «Корзины» получаем плагином цену товара и делим её на 100?

      На какое событие нужно писать плагин?
      Плагином нужно менять стоимость товара? или стоимость заказа?
        Іван Клімчук
        23 мая 2019, 11:38
        0
        Я исхожу из того, что у вас описано в вопросе, что у вас там еще накручено дополнительно, я не знаю и знать не могу, поэтому это уже вам решать. Написано было, что количество задается метрами, без всяких count. А следовательно можно купить либо 0.5 м либо 1.5 метра. Это дроби, но ничего не мешает указывать в поле количество сантиметры, как и цену выставить за сантиметр, тогда вообще ничего менять не нужно, кроме форматирования на сайте (там да, нужно будет цифры разделить на 100, цену — уможить на 100).
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4