Autor Zpráva
gaminn
Profil *
Zdravím,
ani nevím, do jakého fóra dát tento thread, takže to zkusím tady.

Přemýšlím nad tím, jak řešit návrat na předchozí stránku, pomocí tlačítka zpět, které vypisuji na stránce.

Mám dejme tomu strukturu stránek:


hlavní strana produkty
\ /
výpis


Hlavní strana i strana s produkty v sobě mají odkaz na výpis, ve kterém chci mít tlačítko zpět. Jakým způsobem do stránky výpis předat informaci o tom, odkud se přišlo? V tomto jednoduchém případě to je samozřejmě primitivní (předám pomocí url proměnnou s identifikací stránky), ale pokud bych měl složitější strukturu, která by se mohla různě větvit (např. zboží v obchodu, které patří do různých kategorií a podkategorií, navíc obsah těchto kategorií si mohl uživatel před příchodem na produkt různě setřídit, vyfiltrovat....), bude to složitější. Tak tedy - je vhodné předávat celou URL v nějaké proměnné, nebo by bylo vhodné použití prostého odkazu javascript:history.back() za předpokladu, že mám ošetřené post formuláře (takže se po kliknutí na toto tlačítko nezobrazí varování, že post data budou znova odeslána)? Nebo navrhujete jiné řešení?
gaminn
Profil *
Hlavní strana i strana s produkty v sobě mají odkaz na výpis, ve kterém chci mít tlačítko zpět. Jakým způsobem do stránky výpis předat informaci o tom, odkud se přišlo? V tomto jednoduchém případě to je samozřejmě primitivní (předám pomocí url proměnnou s identifikací stránky), ale pokud bych měl složitější strukturu, která by se mohla různě větvit (např. zboží v obchodu, které patří do různých kategorií a podkategorií, navíc obsah těchto kategorií si mohl uživatel před příchodem na produkt různě setřídit, vyfiltrovat....), bude to složitější. Tak tedy - je vhodné předávat celou URL v nějaké proměnné, nebo by bylo vhodné použití prostého odkazu javascript:history.back() za předpokladu, že mám ošetřené post formuláře (takže se po kliknutí na toto tlačítko nezobrazí varování, že post data budou znova odeslána)? Nebo navrhujete jiné řešení?
Anonymní
Profil *
a co $_SERVER['HTTP_REFERER'] ? to by nemohlo byt?
djlj
Profil
Možná bych skombinoval $_SERVER['HTTP_REFERER'] a javascript:history.back()...
Když bude $_SERVER['HTTP_REFERER'] prázdné (zakázané předávání refereru), použil by se JS a opačně...
quinux
Profil
No neřeknu jak to udělat, ale s javascript:history.back() bys si to hodně rychle rozmyslel. Pokud příjde uživatel z vyhledávače tak kam ho asi takovéto tlačítko vrátí? ;o)
djlj
Profil
Pokud příjde uživatel z vyhledávače tak kam ho asi takovéto tlačítko vrátí? ;o)
Myslím, že není takový problém si zjistit, odkud uživatel přišel a v případě vyhledávače tlačítko zpět nezobrazit.
gaminn
Profil *
djlj

Nápad s $_SERVER['HTTP_REFERER'] kombinovaný s javascript:history.back() se mi zdá asi jako nejlepší nápad. Pokud navíc uživatel přijde z domény, která nemá s mým webem nic společného, tlačítko zpět se neukáže. Díky za inspiraci;)
anode
Profil
Pokud bude chybět HTTP_REFERER a použiji tedy javascript:history.back() , jak ověřím, odkud vlastně uživatel přišel? Nenapadá mě žádný způsob -> použil bych pouze HTTP_REFERER.
gaminn
Profil *
anode

Zásadní problém ale je, když HTTP_REFERER bude chybět, kam mám uživatele odkázat? To už raději použiji javascript:history.back() v tomto případě a nebude mě zajímat, že se uživatel vrátí třeba do vyhledávače.
anode
Profil
Je to asi otázka přístupu. Já se na to dívám tak, že tlačítko Zpět tak nemá úplně suplovat funkci prohlížeče, že má sloužit zkrátka tak, aby když procházím výpis produktů a dostanu se na detail nějakého produktu, aby mě to umělo vrátit na ten samý výpis zpátky.
Minimálně jako klient bych to skutečně nečekal, že tlačítko "Zpět" na jednom webu mě přesměruje na jiný web, nebo dokonce na výsledky vyhledávače, odkud jsem přímo na detail přišel. Pokud by tam nějaké takové tlačítko bylo, předpokládal bych, že mě přesměruje o úroveň výše na tomtéž webu. K tomu je ale podle mého názoru stejně daleko vhodnější nějaká řádková navigace, jako například zde "Diskuse » PHP » Návrat na stránce (tlačítko zpět)". Tlačítko zpět proto zobrazuji pouze, pokud mám HTTP_REFERER a vede na můj web.
gaminn
Profil *
S tím souhlasím, máš pravdu.

Potíž je ale právě s dostupností HTTP_REFERER. Co takhle jej suplovat tím, že bych na každé své stránce uložil do session adresu aktuální stránky a tu pak na další stránce načítal. Stejný pricnip jako HTTP_REFERER s tím, že je zaručeno, že bude vždy k dispozici.
anode
Profil
Samozřejmě sledovat uživatele pomocí session proměnných je jistější, protože to provádíme na serveru a nejsme závislí na klientovi. Pozor, vždy ale existovat nebude - právě ve zmiňovaném případě, kdy na detail produktu přijde někdo například z vyhledávače přímo, aniž by navštívil jedinou naši sekci. Navíc takto musíme v session uchovávat nejen jméno stránky, kde byl uživatel minule, ale navíc i všechny parametry tohoto skriptu. HTTP_REFERER nám toto dá zdarma. Přiznám se ale, že nevím, kolik procent prohlížečů nepodporuje HTTP_REFERER (ignoroval bych uživatele, kteří si ho záměrně změní). Navíc specifikace HTTP neklade na klienty povinnost tuto hlavičku odesílat. Takže jistější je určitě sledování přes session, jenom dá trochu víc práce.
Toto téma je uzamčeno. Odpověď nelze zaslat.