Корзина Codeigniter: специальные предложения, индивидуальные цены на содержимое корзины - как подойти?

Я успешно создал простое веб-приложение с тележкой.

Теперь мне нужно реализовать несколько специальных предложений.

Пример 1: если покупатель добавил 2 штуки какого-то товара - вторая должна стоить на 30% меньше.

Пример 2: если покупатель добавляет product_1 и product_2 - мне нужно добавить продукт 3 бесплатно.

Нет проблем с реализацией самой бизнес-логики.

Проблема в том, что у меня нет подробной информации о продукте в корзине Codeigniter.

В объекте / массиве элемента есть поля id, name, qty, price, subtotal и options.

Чтобы пересчитывать цены без запроса базы данных при каждом изменении корзины, мне нужны дополнительные поля, например группа / категория, которые сообщают мне, какое специальное предложение применимо к этому продукту.

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

Где мне разместить эту дополнительную информацию?

options поле уже используется ...

Я не хочу запрашивать базу данных при каждом обновлении корзины (я хочу, чтобы мое веб-приложение было очень быстрым, и мне нужна минимальная нагрузка на сервер).

Могу ли я ожидать проблем с этими rowid, когда я изменю цену на какой-либо товар в корзине?

Я спрашиваю об этом, потому что уникальный 'rowid' корзины - это контрольная сумма md5 элементов id и options массива. Мое приложение будет использовать разные цены на один и тот же продукт с одинаковыми опциями (например, одна обычная цена, другая - 70%).


person Kamil    schedule 08.12.2012    source источник


Ответы (2)


Корзина Codeigniter поможет вам начать работу, но для любой настройки я рекомендую создать собственную корзину, это будет намного проще. Помните, что все, что нужно сделать тележке, - это сохранить идентификатор продукта и количество. Вот и все. Все остальное предназначено для просмотра корзины и создания заказа. Сумма заказа не указана в корзине, потому что для большинства заказов будут взиматься другие сборы, такие как доставка / налог. и / или могут проводиться акции, изменяющие окончательную цену.

Таким образом, вы можете решить включить название продукта в корзину, чтобы его было легче отображать. И разумно хранить вес корабля. Но даже хранить цену в тележке может быть опасно. Что делать, если цена повышается или понижается, когда покупатель делает покупки? Это могут быть крайние случаи, но они показывают, насколько «устаревшей» может стать информация в корзине.

Приведенный вами пример хорош, потому что вы очень быстро видите - корзина предназначена для отслеживания одной позиции за раз. Для любой логики вроде - если вы купите 3 из них, вы получите третий бесплатно - вы можете встроить такую ​​логику в тележку - но это очень быстро превратится в беспорядочные спагетти!

так что делать? получите объект корзины - вместе с элементами корзины - и передайте его модели продвижения. модель продвижения перебирает все товары в корзине - и ЗАТЕМ вносит коррективы, - которые передаются в методы вашего заказа. Имея модель продвижения, мы сохраняем бизнес-правила для рекламных акций отдельно от корзины. Самое главное

в корзине ничего не меняем!

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

person cartalot    schedule 09.12.2012
comment
Очень полезный совет об обновлении цен, когда кто-то делает покупки. Я никогда не рассматривал такую ​​ситуацию. Спасибо. - person Kamil; 20.01.2013

Я понял, что options может быть массивом массивов, и я могу хранить там любые дополнительные данные.

Я буду использовать этот массив и думаю, что нет необходимости расширять стандартную библиотеку Cart.

person Kamil    schedule 09.12.2012
comment
Мне это не понравилось, особенно когда я пытался обновить корзину. Думаю, создание собственного - единственный лучший вариант. или просто расширяя класс тележки - person Jereme; 15.03.2016