Forum Webscript.Ru

Программирование => PHP => Тема начата: koder20005 от 22 Июня 2007, 16:14:36

Название: Ajax корзинка..Идея..
Отправлено: koder20005 от 22 Июня 2007, 16:14:36
Ребята, идея такая, нужно сделать следующее при нажати на кнопук добавлять в корзину наименование товара и цену его. и чтобы потом при смени страниц эти товары были в корзине.
Я думаю делать так: В сессии хранить код продукта, его название и цену. Чтобы при смене страниц, обращаться к сессии и формировать корзину.  Так вот лучше сохранять название в сессии или каждый раз считывать изи базы, по коду продукта. Просто я где-то видел, что так цена считывается для подсчетов итогов, каждый раз при формировании корзины.
Ребята подскажите так делать или как лучше сделать?
Название: Ajax корзинка..Идея..
Отправлено: USE от 24 Июня 2007, 02:09:09
1. Сохранять данные формирования корзины в сессии
2. Добавлять название товара, цену, количество, наличие (другие данные, по необходимости). Хранить желательно все, что нужно будет в дальнейшем для формирования заказа.

Далее при оформлении заказа создавать заказ в БД на основании введенных данных пользоватем (имя, контакты, адрес доставки и т.п.) и данных, добавленных в корзину, о товарах из сессии.

Не все пользователи дойдут до оформления заказа. Т.е могут отказаться от покупки на стадии исследования сайта. Тогда БД не будет засоряться не нужной информацией.
Название: Ajax корзинка..Идея..
Отправлено: USE от 24 Июня 2007, 02:11:12
Кстати, если вы собираетесь использовать Ajax, тогда товары в корзине должны появляться не после перезагрузки страницы, а сразу после нажатия на кнопку "Добавить в корзину". Да и страницу перезагружать нет смысла (ни автоматом, ни вручную).
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 25 Июня 2007, 16:12:44
USE
по пункту 2, имхо, достаточно кода товара и его количества.
Название: Ajax корзинка..Идея..
Отправлено: USE от 25 Июня 2007, 20:18:06
brainkiller
я понимаю, что это все дело можно достать из БД без особых затрат. НО:
представим себе такую ситуацию: человек бродит по сайту, выбирает товар за 320 у.е., вот добавляет его, ходит дальше по сайту.

Потом когда заходит в корзину и переходит к оформлению товара видит, что товар уже не 320, а 325. Он удивляется, обижается, думает, что его хотят обмануть и уходит.

Поясню: такая ситуация возможна. Покупатель видел товар на странице по 320, добавил его в корзину, а в это время оператор обновлял наличие и цены, и в связи с тем, что цена у поставщика выросла, все последующие продажи будут уже по новой цене. И когда покупатель попадает в корзину - из БД достается уже новая цена.

... в общем суть понятна. Для компании 5 у.е. - фигня, а для покупателя - отказ от покупки.
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 25 Июня 2007, 21:03:29
USE
А ситуация, когда цену поменяли в период между выдачей покупателю страницы с ценой товара и кнопкой "добавить в корзину" и, собственно, совершения покупателем этого действия? Никакая сессия не спасет!

А ситуация, обратная этой? Покупатель добавил товар за 320 у.е. в корзину, оформил заказ, а потом увидел на главной странице только что добавленный баннер с предложением того же товара за 300. Лично я на его месте был бы крайне недоволен.
Название: Ajax корзинка..Идея..
Отправлено: USE от 26 Июня 2007, 01:41:22
brainkiller
1. От нескольких секунд до минуты. Блуждания по сайту занимают больше чем прибывание на конкретной странице.

2. :) Так вот и ответ. Добавленный баннер можно прекрасно понять и кликнуть по нему, соответственно получить товар по 300, а не по 320. Ради этого человек может и потратить еще несколько минут, сэкономить несколько у.е.

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

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

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

Представьте себе такую ситуацию: вы покупаете товар, который вам нужен, но вы в нем не очень хорошо разбираетесь (ноутбук, например, из одного модельного ряда в котором куча модификаций например все самсунги x10). Так вот, вы вроде бы уже выбрали товар, так как не очень хорошо знаете, что вам надо - решающим фактором для вас будет и цена, на которой вы обязательно сконцентрируете свое внимание. Теперь попав в корзину у вас другая цена, не такая как была в каталоге (не зависимо от того больше или меньше) - вы засомневаетесь в том, тот ли это товар, что вы выбирали. Может быть продавец ошибся и предлагает не то что вам нужно... Таким образом вы выведете покупателя на путь отказа от покупки.
Название: Ajax корзинка..Идея..
Отправлено: USE от 26 Июня 2007, 01:43:41
brainkiller
1. От нескольких секунд до минуты. Блуждания по сайту занимают больше чем прибывание на конкретной странице.

2. :) Так вот и ответ. Добавленный баннер можно прекрасно понять и кликнуть по нему, соответственно получить товар по 300, а не по 320. Ради этого человек может и потратить еще несколько минут, сэкономить несколько у.е.

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

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

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

Представьте себе такую ситуацию: вы поку
Название: Ajax корзинка..Идея..
Отправлено: USE от 26 Июня 2007, 01:43:41
brainkiller
1. От нескольких секунд до минуты. Блуждания по сайту занимают больше чем прибывание на конкретной странице.

2. :) Так вот и ответ. Добавленный баннер можно прекрасно понять и кликнуть по нему, соответственно получить товар по 300, а не по 320. Ради этого человек может и потратить еще несколько минут, сэкономить несколько у.е.

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

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

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

Представьте себе такую ситуацию: вы поку
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 26 Июня 2007, 13:12:01
1. Это не аргумент. Как бы ни был мал данный промежуток времени (а он может быть и не столь мал - покупатель внимательно изучает характеристики товара, советуется с женой etc), ситуация вполне реальная. Я загрузил страницу, увидел устраивающую меня цену, отправил товар в корзину, а он вдруг подорожал. Непорядок.

Таким образом, сохранение цены в сессии не предохраняет нас от возникновения такой ситуации.

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

Хотя для ряда случаев это было бы неплохим выходом.

2. Поздно кликать баннер для получения товара за 300, если я его уже купил за 320. А процент вероятности может быть ничтожно малым, а может и равняться ста - все зависит от баннерокрутилки на данном конкретном сайте. Да и необязательно это должен быть именно баннер: прайс-лист, к примеру, вполне удовлетворяет всем условиям для возникновения этой ситуации.
Название: Ajax корзинка..Идея..
Отправлено: USE от 26 Июня 2007, 13:27:19
1. Если не хранить цену в сессии, тогда такая ситуация наступит с большей вероятностью, чем когда цена сохранилась и протянулась вплоть до оформления заказа.

Не предохраняет, но уменьшает риск.

При выводе страницы... да, интересный вариант, нужно будет воспользоваться. Скажем сделать поле или доставать через иннерХТМЛ.

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

Когда человек делает заказ, он уже не ходит по сайту, он обычно идет тратить время на что-то другое.
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 27 Июня 2007, 14:40:42
1. Итак, мы пришли к выводу, что сохранять цену товара в сессии целесообразно, но делать это нужно заблаговременно, дабы избежать упомянутых ситуаций.

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

2. Можно при оформлении заказа сравнивать текущую цену с записанной в сессию, и использовать меньшую. Клиент не расстроится.

Если все же возникла ситуация, при которой клиент переплатил за товар, то:

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

 - Если магазин получает оплату сразу (по банковским картам или через электронные платежные системы вроде WM или Яндекс.Денег), излишек средств можно автоматически конвертировать в скидку на эту сумму на любую последующую покупку в магазине, стимулируя его потратить еще.
Название: Ajax корзинка..Идея..
Отправлено: USE от 27 Июня 2007, 15:08:51
1. Согласен. Тогда уже нужно записать в сессию и отображать эту цену. Т.е. если клиент зашел на страницу, почитал про товар и пошел дальше. Потом все-таки определился и решил совершить покупку и вернулся обратно на карточку товара - ему должна отображаться старая (либо меньшая цена, если производились изменения операторами).

2. Да, идея хороша.

З.Ы. Интересно, топикстартеру пригодилось? :-)
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 27 Июня 2007, 15:24:39
1. Здесь есть определенная сложность: в таком случае нам придется хранить в сессии помимо добавленных в корзину товаров еще и практически полный лог перемещений юзера по сайту. Полагаю, нужно ограничиться двумя-тремя последними посещенными товарами. Тут, как говорится, "по три, но вчера" - нельзя заморозить цену на товар для конкретного пользователя навечно только на том основании, что он ее когда-то увидел на сайте.

2. Мне самому понравилась. :-) Надо будет на практике попробовать.

З.Ы. А ведь и правда, притих он как-то... Впрочем, если даже и нет, то неважно: пригодится кому-нибудь еще! :-)
Название: Ajax корзинка..Идея..
Отправлено: USE от 27 Июня 2007, 15:36:24
1. Да, однозначно, нужна золотая середина. Последние несколько товаров - это нормально. Потому как очень много зевак ходит, и конверсия обычно не так велика, чтобы тратить так много усилий ради незаметного для пользователя улучшения.

Возможно даже оставляя для покупателя цену ниже, чем стала, нужно ему об этом говорить. Вывести большими буквами, что цена выросла - спешите сделать покупку! Либо цена упала, мы продаем вам дешевле.

2. Вот и отлично, идея выношена, теперь ее можно подстраивать под реальные условия.
Название: Ajax корзинка..Идея..
Отправлено: ondr от 27 Июня 2007, 15:51:02
USE
Цитировать
Поясню: такая ситуация возможна. Покупатель видел товар на странице по 320, добавил его в корзину, а в это время оператор обновлял наличие и цены, и в связи с тем, что цена у поставщика выросла, все последующие продажи будут уже по новой цене. И когда покупатель попадает в корзину - из БД достается уже новая цена.

Совет: Закройте магазин на ревизию (час или более) и вносите изменения. Ревизию стоит проводить в наименее посещаемое время суток.
Название: Ajax корзинка..Идея..
Отправлено: USE от 27 Июня 2007, 15:56:15
ondr
не-а, не получится, потому как интернет-магазин, он на то и интернет-магазин, что работает 24 часа в сутки.

Операторы работают на протяжении рабочего дня: добавляют новые товары в каталог, загружают (обрабатывают) прайсы поставщиков, управляют доставками и т.п. и т.п.

Закрывать магазин ночью - нет смысла - кто будет производить изменения? А в рабочее время закрывать - себе в убыток.
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 27 Июня 2007, 16:55:30
USE
можно, но лишь в том случае, если у подавляющей массы клиентов глубокая ночь, а у контент-менеджера день. :-)
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 29 Июня 2007, 16:47:31
USE
да, еще дату стоило бы фиксировать как в предварительных данных, так и в данных заказа - чтобы ограничить время ожидания активных действий клиента во избежание злоупотреблений функцией сохранения текущей цены.
Название: Ajax корзинка..Идея..
Отправлено: USE от 29 Июня 2007, 21:59:21
brainkiller
Срок действия сессии. Упала сессия - пропали цены.
Название: Ajax корзинка..Идея..
Отправлено: USE от 30 Июня 2007, 03:40:15
Описанные алгоритмы очень хороши, но будет ли бюджет на их разработку, потому как они довольно опциональны, и в редких магазинах я думаю такое реализовано (если вообще реализовано).

Поэтому на некоторых моментах нужно экономить.

Минус в том, что заказчик обычно не оценивает таких фич.
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 30 Июня 2007, 14:34:06
USE
Насчет срока действия сессии спорно: сегодня посмотрел, выбрал, но решил подумать, либо на счете не оказалось достаточной суммы; через неделю вернулся, а пакет заказов уже пропал - придется все делать заново.

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

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

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

----------------------

Да, согласен, что в большинстве случаев такой проработки нюансов попросту не нужно. Однако, в случае разработки большого серьезного ресурса (где, как правило, наличествует свой штат разработчиков) такие моменты вполне могут быть продуманы и реализованы.
Название: Ajax корзинка..Идея..
Отправлено: USE от 30 Июня 2007, 15:25:45
Цитировать
brainkiller:
Насчет срока действия сессии спорно: сегодня посмотрел, выбрал, но решил подумать, либо на счете не оказалось достаточной суммы; через неделю вернулся, а пакет заказов уже пропал - придется все делать заново.


Тогда нужно делать регистрацию и сохранение заказа.

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

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

Если же человек постоянный покупатель магазина (т.е. есть шанс, что вернется), тогда у него должна быть уже регистрация с заполненными анкетными данными. И тогда уже будут действительными все предложенные выше возможности напоминаний и т.п.
Название: Ajax корзинка..Идея..
Отправлено: brainkiller от 30 Июня 2007, 16:56:03
Вообще, да - что-то я разошелся! Если заказ не прошел по причине нехватки средств, то он уже будет сохранен как заказ, останется его только оплатить (здесь тоже надо ввести временные ограничения). Если выбрал, но решил пока не делать, то хватит и срока действия сессии.