[Решено] Как правильно добавить упаковку товара minishop2?
Есть товары, которые нужно раскладывать по упаковкам. Упаковка тоже имеет свою цену.
К примеру в упаковке размещается по 4 единицы товара, значит при заказе пяти единиц нужно добавить в корзину две единицы упаковки и их стоимость добавить к сумме заказа.
Как правильно реализовать данный функционал, чтобы это не было костылем?
UPD: Решил, но все таки немного пахнет костылями ))
В общем принцип такой:
шаг 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);
К примеру в упаковке размещается по 4 единицы товара, значит при заказе пяти единиц нужно добавить в корзину две единицы упаковки и их стоимость добавить к сумме заказа.
Как правильно реализовать данный функционал, чтобы это не было костылем?
UPD: Решил, но все таки немного пахнет костылями ))
шаг 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);
Комментарии: 3
в общем. решил так: добавил товарам поле ИД коробки и поле Количество в 1 ед. тары.
Потом сделал плагин на добавление товара в корзину, там идет перерасчет и добавление в корзину нужного количества тары. Если кому будет надо, могу расшифровать подробнее.
Потом сделал плагин на добавление товара в корзину, там идет перерасчет и добавление в корзину нужного количества тары. Если кому будет надо, могу расшифровать подробнее.
Да я сейчас пишу такой плагин. Можете расшифровать?
В общем принцип такой:
шаг 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);
шаг 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);
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.