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

Дополнение: minishop2

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

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

Комментарии (3)

  1. gruzoveek 13 сентября 2017, 09:47 # +2
    в общем. решил так: добавил товарам поле ИД коробки и поле Количество в 1 ед. тары.
    Потом сделал плагин на добавление товара в корзину, там идет перерасчет и добавление в корзину нужного количества тары. Если кому будет надо, могу расшифровать подробнее.
    1. chemist 10 октября 2017, 21:56 # 0
      Да я сейчас пишу такой плагин. Можете расшифровать?
      1. 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);
    Вы должны авторизоваться, чтобы оставлять комментарии.