Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Cookie, localStorage как сделать корзину? (https://javascript.ru/forum/dom-window/60670-cookie-localstorage-kak-sdelat-korzinu.html)

melst 15.01.2016 09:33

Цитата:

Сообщение от ivt22 (Сообщение 403833)
а мне как раз нужно что-то, что сохранялось бы при обновлении страницы и при переходе на другую страницу, что бы я мог таскать список товаров за пользователем, я новичек и книжку по JavaScript только начал читать, а задачу мне срочно нужно как-то решить. Потому что срок пробной версии Битрикса заканчивается через 4 дня и если я не успею клиенту показать рабочий вариант, то он не оплатит Битрикс. И тогда месяц работы коту под хвост. Вот я и прошу помощи, потомучто самостоятельно я никак не успеваю разобраться.

Вот я как раз о том же говорю. Я использую сессию на клиенте, но как я понял можно и каждый раз запрос делать и при нажатии на кнопку, и при обновлении страницы. С помощью sessionStorage у меня работает. Но вот laimas указывает, что это лишнее.

laimas 15.01.2016 11:43

Цитата:

Сообщение от melst
А как быть с данными которые получены асинхронно при обновлении страницы или переходе на другую? Я sessionStorage только для этого использую.

Цитата:

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

Сессия, которую можно стартовать на сервере и использовать посредством супеглобального массива $_SESSION тогда по вашему для чего?

melst,

session_start();
if (!isset($_SESSION['id'])) {
    $_SESSION['id'] = array();
    
}
array_push($_SESSION['id'], $id);


зачем тогда на сервере, если вы еще дублируете это на клиенте в sessionStorage?

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

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

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

melst 15.01.2016 13:48

Цитата:

Сообщение от laimas (Сообщение 403847)
Только добавление товаров в корзину на сервере как изложено выше... ну в общем это не корзина.

Ну вот... А что есть корзина? Это я привел пример того как записываю каждый id в сессию. Кроме этого, конечно есть и полная выборка из БД. Проверки различные пока не делал. Костяк хочу сначала сотворить.

laimas 15.01.2016 14:07

Цитата:

Сообщение от melst
А что есть корзина?

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

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

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

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

DynkanMaclaud 15.01.2016 21:09

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

laimas 16.01.2016 01:01

Цитата:

Сообщение от DynkanMaclaud
Так с данными в localStorage намного легче работать...

Не путайте корзину товаров, которую нужно класть в сессию, а не в локальное хранилище, с базой товаров, которую уж никак в локальное хранилище помещать нельзя.

DynkanMaclaud 16.01.2016 11:39

laimas,
Вы в своем примере ориентированны на php и БД, да список товаров на странице нужно получать из БД, но корзину товаров для пользователя можно хранить в локальном хранилище (а почему её там нельзя хранить?))

laimas 16.01.2016 12:33

Цитата:

Сообщение от DynkanMaclaud
корзину товаров для пользователя можно хранить в локальном хранилище (а почему её там нельзя хранить?)

Я писал, что нет смысла хранить товары в сессионном хранилище на клиенте, если есть сессия на сервере, добавление товара и изменение корзины обязательно через запрос сервера делается.

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

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

DynkanMaclaud 16.01.2016 13:11

laimas,
возможо тот человек который создал эту тему не знает основ php, ну а тут надо параметры отправить на сервер эти параметры нужно обработать далее закинуть в сесссию и сделать это все через ajax... а может просто легче ему на клиенте все это хранить?)) тут знаний чистого js достаточно будет))))

laimas 16.01.2016 13:23

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


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