Автор Тема: добавить в корзину, остаться на той же странице  (Прочитано 5779 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
В продолжении темы о REFERER (http://forums.webscript.ru/showthread.php?s=&threadid=18104&msgnum=26), т.е. о том, как остаться на той же самой странице после выполнения запроса, по параметрам которого изначально не догадаться, с какой страницы он был отправлен.

Теперь немного другая ситуация:
Есть инет-магазин. В нём товары могут выводиться в едином каталоге, в каталогах по категориям, в результатах поиска и т.д. Из всех этих типов страниц товар может быть добавлен в корзину. После нажатия на «добавление в корзину» надо:
а) добавить товар в корзину на сервере
б) пересчитать корзину
в) вывести ту же самую страницу, с которой товар был добавлен, с обновлённой информацией о корзине (кол-во товаров и общая стоимость).

Раньше для возвращения на ту же страницу использовал print redirect (referer()).
Теперь ищу альтернативу. Вариантов много:

а) В урл добавления товара (“choice=add;id=1”) добавить параметр source_query, в который записать escape (query_string()), а потом после обработки добавления товара делать на него переход print redirect (url().”?”.unescape (param (“source_query”))). Плюс – независимость от JavaScript, минус – полный рефреш страницы, хранение параметра source_query в каждом из 100 урлов добавления товара (увеличение размера страницы на 5-10 кб).

б) Использовать единую форму для вывода текущей страницы каталога. В ней будет один хидден, хранящий текущий урл, а каждая кнопка добавления товара в корзину будет сабмитом с определённым именем. Плюс – не надо хранить 100 копий урла, минус – передача данных в урле не в виде “choice=add;id=1”, а в виде “add1.x=1;add1.y=2” (или использование хидденов choice, id и джаваскрипта для приведения урла к виду “choice=add;id=1”).

в) Повесить на каждую кнопку «добавления в корзину» JavaScript-обработчик клика, который будет в невидимом фрейме добавлять товар в корзину на сервере (Perl), а потом рефрешить текущую страницу (JS). Плюс - урл текущей странице вообще запоминать не надо. Минус – обязательное использование JavaScript (или его уже никто не отключает в настройках броузеров?).

г) Повесить на каждую кнопку «добавления в корзину» JavaScript-обработчик клика, который будет в невидимом фрейме добавлять товар в корзину на сервере, а потом обновлять (через innerHTML) строку с информацией о текущем состоянии корзины. Плюс – не надо рефрешить страницу. Минус – а все ли броузеры поддерживают innerHTML для слоёв или параграфов? Нетскейп, по-моему, не поддерживает.

д) Записывать в переменную сессии очередной урл, если он связан с выводом списка товаров (а не, например, добавление или удаление), и делать на него переход, если было получен запрос на добавление товара в корзину. Плюс - нет JavaScript, не надо сохранять текущий урл где-то на странице. Минус - необходимость в рефреше страницы.

По-моему, мой вопрос достаточно банальный для современных веб-приложений, и поэтому, наверное, на основе опыта уже должно быть выработана оптимальная реализация этого. С интересом ознакомлюсь с ней и (optional) аргументами в её пользу.
« Последнее редактирование: 26 Сентября 2004, 17:18:35 от Forza »

Оффлайн CGVictor

  • теперь местный
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2511
  • +0/-0
  • 2
    • Просмотр профиля
    • http://cg.net.ru
Вариант В. ИМХО.
LJ: Backslashed life (rss)

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Forza

Мое IMHO - никаких редиректов обратно, по причинам:

1. Многие пользователи, которые после нажатия на ссылку "Положить в корзину" и остались на той же странице, первым делом идут в корзину - проветь, положилось ли туда чего, сколько и то ли что нужно? Информация о корзине не всегда помогает;
2. Многие пользователи покумают в интернет магазине одну(!) вещь, и смысла оставаться в каталоге товаров - никакого нет;
3. Геморой с редиректом - лишняя нагрузка на сервер и постоянные глюки в браузере...

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
Цитировать
CGVictor:
Вариант В. ИМХО.

Я уже остановился на варианте "Д" и реализовал его. См. http://www.disctorg.ru
Цитировать
Phoinix:
1. Многие пользователи, которые после нажатия на ссылку "Положить в корзину" и остались на той же странице, первым делом идут в корзину - проветь, положилось ли туда чего, сколько и то ли что нужно? Информация о корзине не всегда помогает;

См. http://www.disctorg.ru. На каждой странице есть информация о текущем состоянии корзины. Она хорошо бросается в глаза, нет? Мне-то самому уже не оценить. ;)
Цитировать
Phoinix:
2. Многие пользователи покумают в интернет магазине одну(!) вещь, и смысла оставаться в каталоге товаров - никакого нет;

А нам такие нафиг не нужны. ;) Там магазин двд-дисков - большинство дисков стоят 100, а минимальный заказ - 300.
Цитировать
Phoinix:
3. Геморой с редиректом - лишняя нагрузка на сервер и постоянные глюки в браузере...

Разве есть какие-то лишние нагрузки на сервер и тем более глюки в браузере при реализации варианта "д"?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28