15.01.2016, 09:33
|
Интересующийся
|
|
Регистрация: 26.11.2015
Сообщений: 28
|
|
Сообщение от ivt22
|
а мне как раз нужно что-то, что сохранялось бы при обновлении страницы и при переходе на другую страницу, что бы я мог таскать список товаров за пользователем, я новичек и книжку по JavaScript только начал читать, а задачу мне срочно нужно как-то решить. Потому что срок пробной версии Битрикса заканчивается через 4 дня и если я не успею клиенту показать рабочий вариант, то он не оплатит Битрикс. И тогда месяц работы коту под хвост. Вот я и прошу помощи, потомучто самостоятельно я никак не успеваю разобраться.
|
Вот я как раз о том же говорю. Я использую сессию на клиенте, но как я понял можно и каждый раз запрос делать и при нажатии на кнопку, и при обновлении страницы. С помощью sessionStorage у меня работает. Но вот laimas указывает, что это лишнее.
|
|
15.01.2016, 11:43
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от melst
|
А как быть с данными которые получены асинхронно при обновлении страницы или переходе на другую? Я sessionStorage только для этого использую.
|
Сообщение от ivt22
|
а мне как раз нужно что-то, что сохранялось бы при обновлении страницы и при переходе на другую страницу, что бы я мог таскать список товаров за пользователем
|
Сессия, которую можно стартовать на сервере и использовать посредством супеглобального массива $_SESSION тогда по вашему для чего?
melst,
session_start();
if (!isset($_SESSION['id'])) {
$_SESSION['id'] = array();
}
array_push($_SESSION['id'], $id);
зачем тогда на сервере, если вы еще дублируете это на клиенте в sessionStorage?
Сессия по умолчанию живет 24 минуты, если в течении этого времени будет запрос от клиента, то смерть будет отложена на следующие 24 минуты, и т.д. Другими словами, если корзина хранится в сессии, то никуда она не пропадет при переходах между страницами, и пофигу каким образом данные для корзины получены от клиента, асинхронным запросом или нет. Только добавление товаров в корзину на сервере как изложено выше... ну в общем это не корзина.
sessionStorage будут полезна тогда, когда у клиента будут отключены куки и идентифицировать сессию клиента не получится.
ivt22, я уже писал, что куки можно использовать, и как сессионные, и как действующие установленное время. Только в Битриксе уже есть готовое, что касается продажи, корзины и прочего что с этим связано.
|
|
15.01.2016, 13:48
|
Интересующийся
|
|
Регистрация: 26.11.2015
Сообщений: 28
|
|
Сообщение от laimas
|
Только добавление товаров в корзину на сервере как изложено выше... ну в общем это не корзина.
|
Ну вот... А что есть корзина? Это я привел пример того как записываю каждый id в сессию. Кроме этого, конечно есть и полная выборка из БД. Проверки различные пока не делал. Костяк хочу сначала сотворить.
|
|
15.01.2016, 14:07
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от melst
|
А что есть корзина?
|
Корзину, ее код, будет определять в том числе и способ добавления товара: по количеству - либо по одному одного товара, либо можно добавлять несколько одного и того же товара, по групповому/одиночному добавлению - либо можно выбрать группу различных товаров в категории на странице, либо только один товар.
Структура массива корзины должна быть такова, чтобы удобно было просчитать общее количество товаров и их общую стоимость, это нужно для краткого представления корзины.
Добавление товара в корзину начинается с запроса в базу - существует ли вообще такой товар, и если да, только затем пишется в сессию, в корзину, вернув в запросе цену товара, можно и другие важные характеристики, например наименование и т.п, чтобы по полном отображении корзины не делать более запросов в базу.
Если ли такой товар в корзине или нет, это вопрос резиновый, ибо если есть еще не означает, что отказать в доступе к корзине, ведь у товара может просто изменяться количество товаров в ней. А вот исключить из запроса клиента идентификаторы товаров которые уже есть в корзине надо, и если в запросе остались после этого ключи, значит это добавляемые товары, и по ним делается запрос в базу.
|
|
15.01.2016, 21:09
|
|
Профессор
|
|
Регистрация: 08.08.2014
Сообщений: 261
|
|
я написал этот скрипт (но показывать его не буду, ну он уж очень мне не нравится в плане свой поддерживаемости) в localStorage при клике я помещал name продукта... тоесть помещал строку, но сейчас пишу скрипт где будет помещаться обьект но переобразованный в строку через JSON, а из localStorage я читаю его как обьект, это наиного удобнее, так как получаешь сразу набор данных : цена товара и описание, название продукта... Так с данными в localStorage намного легче работать... попробуй сам напиши...
Последний раз редактировалось DynkanMaclaud, 15.01.2016 в 21:12.
|
|
16.01.2016, 01:01
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от DynkanMaclaud
|
Так с данными в localStorage намного легче работать...
|
Не путайте корзину товаров, которую нужно класть в сессию, а не в локальное хранилище, с базой товаров, которую уж никак в локальное хранилище помещать нельзя.
|
|
16.01.2016, 11:39
|
|
Профессор
|
|
Регистрация: 08.08.2014
Сообщений: 261
|
|
laimas,
Вы в своем примере ориентированны на php и БД, да список товаров на странице нужно получать из БД, но корзину товаров для пользователя можно хранить в локальном хранилище (а почему её там нельзя хранить?))
Последний раз редактировалось DynkanMaclaud, 16.01.2016 в 11:43.
|
|
16.01.2016, 12:33
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Сообщение от DynkanMaclaud
|
корзину товаров для пользователя можно хранить в локальном хранилище (а почему её там нельзя хранить?)
|
Я писал, что нет смысла хранить товары в сессионном хранилище на клиенте, если есть сессия на сервере, добавление товара и изменение корзины обязательно через запрос сервера делается.
Сессия/сессионное хранилище клиента хорошо для корзины тем, что передумал покупатель, просто ушел, и не останется мусора за ним. Работая же с локальным хранилищем нужно очищать его, все таки не есть хорошо забивать его чем непопадя и кому угодно.
Что касается "с данными в localStorage намного легче работать", это вздор, гораздо проще выглядят операции с корзиной на сервере, а если в смысле доступа к ним, то нет ни каких отличий.
|
|
16.01.2016, 13:11
|
|
Профессор
|
|
Регистрация: 08.08.2014
Сообщений: 261
|
|
laimas,
возможо тот человек который создал эту тему не знает основ php, ну а тут надо параметры отправить на сервер эти параметры нужно обработать далее закинуть в сесссию и сделать это все через ajax... а может просто легче ему на клиенте все это хранить?)) тут знаний чистого js достаточно будет))))
|
|
16.01.2016, 13:23
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,989
|
|
Товары содержатся на сервере, торгует сервер, контроль торговых операций также осуществляется сервером. Каким боком к этому имеет отношение локальное хранилище не понятно - не будет сервера, значит и все хранилища на клиенте это ноль.
|
|
|
|