Forum Webscript.Ru
Программирование => Теория, алгоритмы и стандарты => Тема начата: Forza от 26 Сентября 2004, 15:51:12
-
В продолжении темы о 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) аргументами в её пользу.
-
Вариант В. ИМХО.
-
Forza
Мое IMHO - никаких редиректов обратно, по причинам:
1. Многие пользователи, которые после нажатия на ссылку "Положить в корзину" и остались на той же странице, первым делом идут в корзину - проветь, положилось ли туда чего, сколько и то ли что нужно? Информация о корзине не всегда помогает;
2. Многие пользователи покумают в интернет магазине одну(!) вещь, и смысла оставаться в каталоге товаров - никакого нет;
3. Геморой с редиректом - лишняя нагрузка на сервер и постоянные глюки в браузере...
-
CGVictor:
Вариант В. ИМХО.
Я уже остановился на варианте "Д" и реализовал его. См. http://www.disctorg.ru
Phoinix:
1. Многие пользователи, которые после нажатия на ссылку "Положить в корзину" и остались на той же странице, первым делом идут в корзину - проветь, положилось ли туда чего, сколько и то ли что нужно? Информация о корзине не всегда помогает;
См. http://www.disctorg.ru. На каждой странице есть информация о текущем состоянии корзины. Она хорошо бросается в глаза, нет? Мне-то самому уже не оценить. ;)
Phoinix:
2. Многие пользователи покумают в интернет магазине одну(!) вещь, и смысла оставаться в каталоге товаров - никакого нет;
А нам такие нафиг не нужны. ;) Там магазин двд-дисков - большинство дисков стоят 100, а минимальный заказ - 300. Phoinix:
3. Геморой с редиректом - лишняя нагрузка на сервер и постоянные глюки в браузере...
Разве есть какие-то лишние нагрузки на сервер и тем более глюки в браузере при реализации варианта "д"?