Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Корзина на JS (https://javascript.ru/forum/misc/64481-korzina-na-js.html)

art201214 14.08.2016 21:33

Корзина на JS
 
Здравствуйте, товарищи

Пытаюсь написать корзину, так сказать на native js, и пока слабо представляю как это сделать. Возможно, кто-то сможет хотя бы словесно меня направить в нужное русло. У меня есть некоторые замыслы, они описаны в конце

Есть страница товара (на каждый товар отдельно) и страница корзины отдельно (скрины страниц приложены). Предполагается хранить "корзину" в localstorage.

Со страницы товара нужно вытянуть изображение, название, цену, выбранный цвет и размер. Соответственно, после нажатия кнопки "add to bag" товар должен отобразиться на странице корзины. Если товар с такими же параметрами уже есть в хранилище, нужно увеличить счетчик этого товара в корзине на 1, по клику на "remove item" - уменьшить на 1. Клик по "empty bag" - очистить корзину. Так же нужно подсчитать сумму всех товаров и их количество. 

Скрин товара
Скрин корзины

У меня пока что возникают такие идеи: 

- Для каждого товара по нажатию на кнопку "add" создавать объект, в качестве свойств и сделать изображение(путь к нему), название, цену, выбранный цвет и размер.

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

- Как собрать сумму покупок пока что тоже слабо понимаю

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



Буду благодарен за любые советы и помощь

Bond 15.08.2016 00:35

Здесь делал корзину на jQuery - http://brandshopcity.ru/usa/devochki/komplekty/5
только это корзина чисто для покупателя, все покупки хранятся в куках. Админ магазина не видит корзины пользователей и стату, ему приходят только заказы которые покупатель оформляет на странице корзины.
Да и давно это делал - только с jQuery познакомился, Ajax'ом не умел пользоваться и не знал что такое json, сейчас может быть по другому сделал.:)

laimas 15.08.2016 04:23

Цитата:

Сообщение от art201214
После пройтись по объектам и сравнить свойства только созданного с имеющимися

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

Храня товары в корзине под их идентификаторами, достаточно проверить наличие ID в первичных ключах (свойствах объекта). Шерстить все свойства товаров при этом не требуется. К тому же, большой ошибкой будет хранить товары в базе по принципу - каждая запись, это товар А, но с различными свойствами. В таблице хранят основные характеристики товара, а свойства которые могут варьироваться хранят в связанных таблицах, ссылки на которые тоже идентификаторы свойств. То есть корзина по большому счету, это набор чисел.

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

art201214 15.08.2016 10:37

Цитата:

Сообщение от laimas (Сообщение 425415)
Товары, это учет, а значит каждый товар имеет одно уникальное свойство, по которому можно определить тот или иной товар. Таким свойством может служить артикул товара. Храня же товары в базе, поступают еще проще - первичный ключ таблицы описывающей товары, это поле с авто инкрементом, которое автоматически генерирует уникальный идентификатор товара.

Храня товары в корзине под их идентификаторами, достаточно проверить наличие ID в первичных ключах (свойствах объекта). Шерстить все свойства товаров при этом не требуется. К тому же, большой ошибкой будет хранить товары в базе по принципу - каждая запись, это товар А, но с различными свойствами. В таблице хранят основные характеристики товара, а свойства которые могут варьироваться хранят в связанных таблицах, ссылки на которые тоже идентификаторы свойств. То есть корзина по большому счету, это набор чисел.

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

Задача как раз таки хранить корзину в localstorage, это учебный проект, а не заказ для реального использования)
БД совсем нет и не предусматривается, only LS

laimas 15.08.2016 10:59

Ну если учебный, тогда... И учеба подразумевает добавление товара в количество только "одна штука"?

art201214 15.08.2016 11:29

Цитата:

Сообщение от laimas (Сообщение 425431)
Ну если учебный, тогда... И учеба подразумевает добавление товара в количество только "одна штука"?

Ну нет, я же написал, что при добавдлении товара с одинаковыми свойствами должно увеличиваться свойство quantity

laimas 15.08.2016 11:46

Цитата:

Сообщение от art201214
что при добавдлении товара с одинаковыми свойствами должно увеличиваться свойство quantity

А если свойства различны, тогда что, новое добавление? )

warren buffet 15.08.2016 12:53

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.

warren buffet 15.08.2016 12:57

Цитата:

Сообщение от art201214
ри добавдлении товара с одинаковыми свойствами

В нормальном интерфейсе ты не сможешь положить товар ранее положенный в корзину. В нормальном интерфейсе товар положенный в корзину вместо кнопки Купить или В корзину, имеет кнопку В корзине, при нажати на которую (или как-то рядом) ты можешь только изменить количество товара.

warren buffet 15.08.2016 13:02

Цитата:

Сообщение от laimas
есть ли еще ее товары в продаже.

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

art201214 15.08.2016 13:58

warren buffet, я тоже вроде русским языком написал, что БД нет
Под каждый товар есть отдельная страница, интерфейс я не разрабатываю. Есть макет, который нужно было сверстать и добавить некоторый функционал на js, Корзина - одна из задач функционала. Страницы уже готовы и прикреплены их скрины в первом посте

art201214 15.08.2016 14:00

Цитата:

Сообщение от laimas (Сообщение 425443)
А если свойства различны, тогда что, новое добавление? )

Да-да, именно. Т.е. в итоге должен будет появиться новый блок именно с товаром с этими (отличающимися от имеющихся) свойствами

laimas 15.08.2016 14:16

warren buffet, куда нам, дуракам, чай пить, мы все с придыханием внемлем исключительно твоей непревзойденной гениальности.

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

Чего распинаешься то, ему все твои "умные" мысли не нужны - написал же он - все по барабану, это урок. Единственное что можно сказать, это то, что для изучения локального хранилища что-то наворачивать не требуется. А урок не имеющий связи с реальностью, это пустая трата времени.

А для меня:

Цитата:

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

это твой очередной бред, почему бред, думай сам.

laimas 15.08.2016 14:24

Цитата:

Сообщение от art201214
Да-да, именно. Т.е. в итоге должен будет появиться новый блок именно с товаром с этими (отличающимися от имеющихся) свойствами

Даже если это урок бог весь на чем базирующийся, то хранить запись:

А, синий, 1 штука
А, зеленый, 2 штуки
...

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

Попробуйте абстрагироваться от локального хранилища, представьте себе, что описание товаров хранится в обычном ассоциативном массиве. А массив не может иметь дубликаты ключей, собственно как и объект не может иметь дубликат свойства.

Вопрос - как должны быть описаны товары в массиве, если они имеют уникальные идентификаторы и характеристики? Попробуйте представить это.

warren buffet 15.08.2016 14:52

Цитата:

Сообщение от art201214
Под каждый товар есть отдельная страница

То есть твоя БД лежит на диске. Файловая система - это разновидность базы данных. Так что смело добавляй в корзину - адрес страницы. А поскольку энтропия таких адресов стремиться к 99%, то добавляй действующее вещество - имя страницы. Таким образом в твоей корзине будет лежать тот же самый id и количество. Соединяя общую часть адреса с этим id ты получишь полный адрес страницы и сможешь загрузить ее аяксом в скрипт корзины, чтобы получить всякие там фотки и названия на русском языке.

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

warren buffet 15.08.2016 14:53

Например товар лежит по адресу

http://javascript.ru/forum/misc/6448...a-na-js-2.html

тогда его id - 64481

Понял? Чтобы сделать страницу товара, тебе нужен уникальный идентификатор, который нужен для Unique Resource Locator - урла. Два одинаковых урла покажут одинаковый контент. Уникальность адресов - это и есть ключ.


Часовой пояс GMT +3, время: 05:35.