Битрикс. Особенности корзины с комплектами

Битрикс. Особенности корзины с комплектами

В данной статье мы рассмотрим очень конкретный кейс, часто встречающийся в мебельной тематике: что произойдет, если один и тот же товар добавлен в корзину дважды: один раз в составе комплекта и один раз как самостоятельный товар.

О том, как мы работаем с комплектами и откуда возник данный кейс, читайте в статье про комплекты.

Описание кейса

Представим, что на сайте одна и та же тумбочка представлена как отдельный товар, расположенный в разделе «Тумбы», и в составе спального гарнитура, который расположен в разделе «Спальни». Имеем в виду, что в базе данных сайта эта тумба хранится в единственном экземпляре и одновременно является простым товаром, продающимся отдельно, и элементом комплекта, продающимся в его составе.

Представим, что покупатель добавляет в корзину гарнитур с этой тумбой в комплекте, а затем решает добавить ее в корзину еще раз, но уже как отдельный товар. Для простоты просто предположим, что ему нужна отдельная тумба в другую комнату и он решил купить ее отдельно. В корзине таким образом окажется две тумбы.

Корзина битрикса будет считать, что товар просто добавлен в нее 2 раза. Сколько штук при этом было добавлено через гарнитур, а сколько — не через гарнитур, не отслеживается.

Если на этом этапе покупатель решит оформить заказ, никаких проблем не возникнет. В заказе будет две тумбы, как он и хотел. Но представим, что для чего-то он решил вернуться на страницу гарнитура и изменить количество тумб: вместо одной взять две. Возникает вопрос: как правильно обработать такой запрос покупателя и не наделать ошибок при оформлении заказа? Ведь в итоге в корзине должен оказаться ранее добавленный гарнитур, но уже с двумя тумбами, а также еще одна тумба, которая была добавлена отдельно.

В битриксе «из коробки» нельзя один и тот же товар добавить в корзину двумя разными строками.

Решение

Для упрощения картины страницу гарнитура можно представить как обычную страницу товара с кнопкой «В корзину». Только в отличие от обычного товара, в корзину будет добавляться сразу несколько товаров. Напрашивается следующее решение:

Каждый раз, когда гарнитур добавляют в корзину, его нужно полностью из корзины удалить и добавить заново в новом составе.

Звучит совсем не сложно, но возникает вопрос: как отделить товары нужного нам гарнитура от товаров, которые были добавлены в корзину ранее. Ведь если мы удалим товар из корзины, мы удалим его совсем, а не только то количество, которое нам надо. Здесь на помощь приходит возможность добавления собственных полей для товаров в корзине. То есть, при добавлении товара в корзину мы можем вместе с ним передать дополнительные поля с какой-то информацией. Такой информацией может стать JSON-массив, в котором будет храниться информация о том, откуда и в каком количестве был добавлен в корзину конкретный товар.

Логика следующая. Когда товар добавляется в корзину, мы для него также передаем в корзину примерно такой массив:

{
  	...
    "from_ids": [
       { "from_id":"123", "quantuty":"2" },
     ]
	...
 } 

Таким образом мы указываем, что данный товар был добавлен в корзину со страницы товара с id 123 в количестве 2 штук. В данном случае это гарнитур.

Когда данный товар будет добавлен в корзину еще раз, но уже со страницы отдельного товара, в корзине у этого товара массив обновится до такого примерно состояния:

{
  	...
    "from_ids": [
       { "from_id":"123", "quantuty":"2" },
     ]
 	"from_id":"456": [
        { "from_id":"456", "quantuty":"1" },
     ]
	...
 } 

Таким образом корзина знает, сколько штук откуда было добавлено.

И теперь, когда мы заново добавляем комплект в корзину, мы прочтем информацию из массива и восстановим товар в корзине в том виде, в котором он был.

Есть проект? Свяжитесь с нами.
Дальше: Комплекты и наборы в битриксе. Адаптация для мебельного бизнеса
Напишите нам
Загрузка...
Спасибо
Загрузка...