Задать вопрос
UNN4MED
@UNN4MED
Битрикс разработчик

Как лучше сделать добавление корзины/избранного?

Сейчас я пишу интернет-магазин.
Добавив товар в корзину, я заношу его в localStorage, затем в базу. Такой ход вызывает у меня вопросы: правильно ли я так сделал; если резко обновить страницу, то запрос в базу успеет выполниться.

Как в магазинах сохраняется товар? Сначала заносят в базу, потом в local или наоборот?

Я посмотрел Яндекс Маркет. Там сначала идёт запрос, затем в local при добавлении в корзину/избранное.
На другом сайте (https://lavandaflor.ru/category/deserty) корзина сначала в базу, потом local, а при добавлении в избранное наоборот
  • Вопрос задан
  • 331 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Все очень просто.
Надо всего лишь различать зарегистрированных и незарегистрированных пользователей.
Для первых ничего не пишется на клиента, а только в базу.
Для вторых ровно наоборот - в базу писать нечего, поэтому все сохраняется локально.
Плюс нужна процедура мержа с клиента в базу, когда в момент авторизации что-то есть локальное. По уму надо у пользователя спросить, "вот такие-то товары были в корзине, добавить их к вашей?" Но многие магазины не заморочиваются и просто сливают локальную корзину с той что лежит в базе.
Ответ написан
Stalker_RED
@Stalker_RED
localStorage - штука для удобного кеширования, а не обязательная часть бизнес логики.

Вот что сделает ваш сайт, если у пользователя отключен localStorage? Вариантов два - получить корзину с сервера либо упасть с ошибкой.

А что будет, если пользователь очистит localStorage? Если у него место на диске кончится? Если он добавил товары с ноута, потом зашел на сайт с телефона,и хочет оплатить, а localStorage в телефоне пуст?

Попробуйте, что сделает в таком случае яндекс-маркет.

Никто не мешает записать в localStorage товар с отметкой "id=null", отправить запрос на сервер, и после ответа от сервера, что все ок, заказ в базе, дописать в localStorage его id. И при следующем открытии страницы, если вы нашли товары с id=null - повторить попытку синхронизации с сервером.

Заодно неплохо бы продумать ситуацию, когда пользователь добавил в корзину два товара, потом с телефона добавил еще два, а потом зашел с третьего устройства, и что он в таком случае увидит?

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

Войдите, чтобы написать ответ

Похожие вопросы