Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Алгоритм корзины товаров

7.2K
27 августа 2011 года
polaroid
94 / / 05.07.2008
Доброго времени суток!
Стоит задача - реализовать корзину и оформление заказов в инет-магазине. Существует множество товаров. Эти товары уникальны, т.е. каждый товар можно купить только один раз, после чего он пропадает из ассортимента.
Я реализовал корзину на сессиях (без использования СУБД). В связи с этим получилось так, что каждый пользователь может добавить один и тот же товар в корзину (одновременно). Если один из пользователей вдруг купит этот товар, то, по идее, он должен пропасть у других пользователей из их корзин.
Собственно, вопрос у меня больше архитектурный: правелен ли такой подход к реализации системы покупок?
Например рассмотрим другую ситуацию: допустим корзина реализована через БД и показ ассортимента будет производиться с учетом таблицы БД корзины. Соответственно, те товары, которые у кого-то в корзине, не будут показаны. Но вот, что делать, когда при таком подходе какой-нибудь шалопай вдруг добавит все товары в корзину? Ведь другие пользователи не увидят вообще ничего! Хотя бы на то время, пока не запустился скрипт очистки корзин (через планировщик).
Вообщем подскажите пожалуйста, как будет правильнее реализовать систему покупок. Может быть уже кто-то сталкивался с такой задачей.
Заранее спасибо.
244
27 августа 2011 года
UAS
2.0K / / 19.07.2006
Допустим, что товар из БД не удаляется, а ему ставится флаг, что товар удален.
Тогда достаточно два поля: int - сколько положили в корзину; и bool - товар удален.
Товар в корзину пусть может добавить любой человек, но купить только один. Тогда если человек повторно добавляет в корзину - то можно вывести оповещение, что товар хочет купить и другой человек, т.е. ему надо бы поторопиться. При этом при добавлении в корзину увеличиваем число, при удалении - убавляем.
7.2K
27 августа 2011 года
polaroid
94 / / 05.07.2008
Спасибо за ваш ответ, UAS. Планирую, что в качестве флага "удален" будет стоять номер заказа, в который входит этот товар. Просто меня мучают сомнения по поводу удобства такой системы для покупателя.
Принцип "кто первый встал, того и тапки" конечно подходит для решения этой задачи, но если провести параллель с реальным магазином, то, если покупатель, допустим, навалил в корзину много товаров, подошел к кассе и вдруг передумал их покупать, то они ведь снова появятся на прилавке только через определенное время (когда персонал заново выложит их на полки). Но с другой стороны хотелось бы и банальную "защиту от дурака", т.к. в реальной жизни напихать все товары магазина в корзину сложнее, чем пара кликов в интернет-магазине.
Короче вопрос у меня такой: есть ли смысл делать вывод ассортимента с учетом информации о добавленных в корзины товарах?
Вообще не планируется, что пользователь будет очень долго выбирать товар, т.е. "подобрал по параметрам -> купил", т.е. фактически нет необходимости хранить корзину в БД.
Так что я вот никак не решу, оставить ли так, как уже реализовано, либо заморочиться и сделать "по аналогии с реальной жизнью". Может кто что посоветует?
10
27 августа 2011 года
Freeman
3.2K / / 06.03.2004
Цитата: polaroid
Вообще не планируется, что пользователь будет очень долго выбирать товар, т.е. "подобрал по параметрам -> купил", т.е. фактически нет необходимости хранить корзину в БД.


Если пользователь что-то долго и вдумчиво выбрал по параметрам, а потом не купил, будет весьма полезно сохранить выбор в "Отложенном", как в "Озоне".

Цитата: polaroid
Эти товары уникальны, т.е. каждый товар можно купить только один раз, после чего он пропадает из ассортимента.


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

369
28 августа 2011 года
Kesano
451 / / 09.10.2007
А почему не создать поле(флаг) "Куплен" и не проверять сие поле в процессе оформления заказа.
После нажатия кнопки "Заказать" проводится сверка в БД по товарам в корзине, и если кто-то раньше нажал кнопку "Купить", то пользователю выдаётся сообщение "Извините, выбранный вами товар уже куплен" и возвращает его в корзину, где купленный товар становится "серым", "неактивным".
Такой принцип позволит вести актуальную базу.
Это всё равно что вы приходите в магазин купить кроссовки, которые подобрали вчера.... Приходите - а их уже купили... Что поделать, бывает.
Такой подход будет достаточно лояльным к покупателям.
Также предусмотреть для менеджера кнопку отмены заказа одним кликом и возврата товара на витрину.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог