14.08.2016, 21:33
|
Новичок на форуме
|
|
Регистрация: 14.08.2016
Сообщений: 5
|
|
Корзина на JS
Здравствуйте, товарищи
Пытаюсь написать корзину, так сказать на native js, и пока слабо представляю как это сделать. Возможно, кто-то сможет хотя бы словесно меня направить в нужное русло. У меня есть некоторые замыслы, они описаны в конце
Есть страница товара (на каждый товар отдельно) и страница корзины отдельно (скрины страниц приложены). Предполагается хранить "корзину" в localstorage.
Со страницы товара нужно вытянуть изображение, название, цену, выбранный цвет и размер. Соответственно, после нажатия кнопки "add to bag" товар должен отобразиться на странице корзины. Если товар с такими же параметрами уже есть в хранилище, нужно увеличить счетчик этого товара в корзине на 1, по клику на "remove item" - уменьшить на 1. Клик по "empty bag" - очистить корзину. Так же нужно подсчитать сумму всех товаров и их количество.
Скрин товара
Скрин корзины
У меня пока что возникают такие идеи:
- Для каждого товара по нажатию на кнопку "add" создавать объект, в качестве свойств и сделать изображение(путь к нему), название, цену, выбранный цвет и размер.
- После пройтись по объектам и сравнить свойства только созданного с имеющимися (если уже имеется такой же объект добавить к счетчику, если нет - добавить новый товар в корзину). В этом пункте мне более всего нужны советы, т.к. не представляю как это сейчас сделать
- Как собрать сумму покупок пока что тоже слабо понимаю
- Как удалить один экземпляр товара (уменьшить счетчик товара на 1, если он до этого был =1 - удалить товар (как удалить товар в таком случае - не соображу))
Буду благодарен за любые советы и помощь
Последний раз редактировалось art201214, 15.08.2016 в 14:03.
|
|
15.08.2016, 00:35
|
Профессор
|
|
Регистрация: 16.06.2013
Сообщений: 172
|
|
Здесь делал корзину на jQuery - http://brandshopcity.ru/usa/devochki/komplekty/5
только это корзина чисто для покупателя, все покупки хранятся в куках. Админ магазина не видит корзины пользователей и стату, ему приходят только заказы которые покупатель оформляет на странице корзины.
Да и давно это делал - только с jQuery познакомился, Ajax'ом не умел пользоваться и не знал что такое json, сейчас может быть по другому сделал.
|
|
15.08.2016, 04:23
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от art201214
|
После пройтись по объектам и сравнить свойства только созданного с имеющимися
|
Товары, это учет, а значит каждый товар имеет одно уникальное свойство, по которому можно определить тот или иной товар. Таким свойством может служить артикул товара. Храня же товары в базе, поступают еще проще - первичный ключ таблицы описывающей товары, это поле с авто инкрементом, которое автоматически генерирует уникальный идентификатор товара.
Храня товары в корзине под их идентификаторами, достаточно проверить наличие ID в первичных ключах (свойствах объекта). Шерстить все свойства товаров при этом не требуется. К тому же, большой ошибкой будет хранить товары в базе по принципу - каждая запись, это товар А, но с различными свойствами. В таблице хранят основные характеристики товара, а свойства которые могут варьироваться хранят в связанных таблицах, ссылки на которые тоже идентификаторы свойств. То есть корзина по большому счету, это набор чисел.
А самое главное, это то, что хранить корзину да еще и в локальном хранилище нет никакой необходимости. Добавление товара в корзину должно производиться только с одобрения сервера. А если корзина хранится у клиента и бог знает сколько времени, то первое же к ней обращение предполагает проверку - есть ли еще ее товары в продаже.
|
|
15.08.2016, 10:37
|
Новичок на форуме
|
|
Регистрация: 14.08.2016
Сообщений: 5
|
|
Сообщение от laimas
|
Товары, это учет, а значит каждый товар имеет одно уникальное свойство, по которому можно определить тот или иной товар. Таким свойством может служить артикул товара. Храня же товары в базе, поступают еще проще - первичный ключ таблицы описывающей товары, это поле с авто инкрементом, которое автоматически генерирует уникальный идентификатор товара.
Храня товары в корзине под их идентификаторами, достаточно проверить наличие ID в первичных ключах (свойствах объекта). Шерстить все свойства товаров при этом не требуется. К тому же, большой ошибкой будет хранить товары в базе по принципу - каждая запись, это товар А, но с различными свойствами. В таблице хранят основные характеристики товара, а свойства которые могут варьироваться хранят в связанных таблицах, ссылки на которые тоже идентификаторы свойств. То есть корзина по большому счету, это набор чисел.
А самое главное, это то, что хранить корзину да еще и в локальном хранилище нет никакой необходимости. Добавление товара в корзину должно производиться только с одобрения сервера. А если корзина хранится у клиента и бог знает сколько времени, то первое же к ней обращение предполагает проверку - есть ли еще ее товары в продаже.
|
Задача как раз таки хранить корзину в localstorage, это учебный проект, а не заказ для реального использования)
БД совсем нет и не предусматривается, only LS
|
|
15.08.2016, 10:59
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Ну если учебный, тогда... И учеба подразумевает добавление товара в количество только "одна штука"?
|
|
15.08.2016, 11:29
|
Новичок на форуме
|
|
Регистрация: 14.08.2016
Сообщений: 5
|
|
Сообщение от laimas
|
Ну если учебный, тогда... И учеба подразумевает добавление товара в количество только "одна штука"?
|
Ну нет, я же написал, что при добавдлении товара с одинаковыми свойствами должно увеличиваться свойство quantity
|
|
15.08.2016, 11:46
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от art201214
|
что при добавдлении товара с одинаковыми свойствами должно увеличиваться свойство quantity
|
А если свойства различны, тогда что, новое добавление? )
|
|
15.08.2016, 12:53
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
art201214, тебе же русским языком написали, что корзины так не делаются. Ты не корзину делаешь, а копируешь записи из одной БД в другую БД, причем без всякой связи между копиями.
Придумают свою собственную реальность и бьются как мухи об стекло не могя понять, что форточка открыта.
Начнем со слов
Значит есть база данных товаров, иначе откуда их добавлять. Это не важно в каком формате она и где лежит - хоть прямо в кодах скрипта. Следовательно у товара есть уникальный ключ, например id.
tovary={
[id:1,name:'Лыжи':price:2500],
[id:2,name:'Коньки':price:1500],
[id:3,name:'Кастрюля':price:500],
[id:4,name:'Прокладка':price:250],
};
В корзину записывается как минимум idт товара и количество. Калькуляции чека и рендер корзины делаются по id - qty.
|
|
15.08.2016, 12:57
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от art201214
|
ри добавдлении товара с одинаковыми свойствами
|
В нормальном интерфейсе ты не сможешь положить товар ранее положенный в корзину. В нормальном интерфейсе товар положенный в корзину вместо кнопки Купить или В корзину, имеет кнопку В корзине, при нажати на которую (или как-то рядом) ты можешь только изменить количество товара.
|
|
15.08.2016, 13:02
|
Профессор
|
|
Регистрация: 08.07.2016
Сообщений: 1,332
|
|
Сообщение от laimas
|
есть ли еще ее товары в продаже.
|
Только на сайтах где корзина действует только у зареганных, то есть где работает онлайн оплата и выдаются треки. Для подавляющего числа российских сайтов вся эта цивилизация недоступна и корзины работают через куки без всяких проверок, поскольку важно поиметь клиента, а потом уже разбираться что там есть, чего нету.
|
|
|
|