Как правильно добавить упаковку товара minishop2?

Есть товары, которые нужно раскладывать по упаковкам. Упаковка тоже имеет свою цену.
К примеру в упаковке размещается по 4 единицы товара, значит при заказе пяти единиц нужно добавить в корзину две единицы упаковки и их стоимость добавить к сумме заказа.

Как правильно реализовать данный функционал, чтобы это не было костылем?
gruzoveek
06 сентября 2016, 08:26
518
0

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

gruzoveek
13 сентября 2017, 09:47
1
+2
в общем. решил так: добавил товарам поле ИД коробки и поле Количество в 1 ед. тары.
Потом сделал плагин на добавление товара в корзину, там идет перерасчет и добавление в корзину нужного количества тары. Если кому будет надо, могу расшифровать подробнее.
    chemist
    10 октября 2017, 21:56
    0
    Да я сейчас пишу такой плагин. Можете расшифровать?
      gruzoveek
      15 октября 2017, 19:38
      0
      В общем принцип такой:
      шаг 1. создаю каталог с товарами, товары в нем — это упаковки, задаю им цены.
      шаг 2. создаю дополнительные поля товара, как это делается — тут неоднократно писалось на сайте. поля такие: ID коробки и Кол-во данного товара на единицу упаковки, т.е. вместимость. У всех товаров, у которых предполагается упаковка, заполняю эти поля.
      шаг 3. создается плагин на события
      'msOnAddToCart': // получает $key и $cart
      'msOnChangeInCart': // получает $key, $count и $cart
      'msOnRemoveFromCart': // получает $key и $cart
      в плагине получаю массив коробок из известного мне каталога.

      Потом из переменной $cart методом get() получаю содержимое корзины $tmp = $cart->get();, пробегаю по товарам в цикле и там смотрю, каков id коробки и параметр вместимости товара и сколько этого товара в заказе, таким образом высчитываю сколько и каких коробок надо для такого количества товара.

      Тут есть нюанс: если до этого момента коробок в заказе не было (например при событии msOnAddToCart) то нужно напрямую добавлять в заказ коробки методом $cart->add($box_id); а если коробка уже была в заказе, например при изменении количества товара в корзине (msOnChangeInCart и msOnRemoveFromCart) то тут уже работаем с $tmp, меняя только count для коробок, и по итогу перезаписываем корзину его содержимым: $cart->set($tmp);