This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!

Jakiś czas temu znalazłem u Piotra Sajnoga wpis o WordPressowej wtyczce Comment Redirect, pozwalającej na wyświetlenie po dodaniu przez użytkownika pierwszego komentarza na blogu strony z podziękowaniem [i zachętą do dalszej współpracy ;]]. Zostawiła tam komentarz także Banny, która zdecydowała się przetestować jej [tej wtyczki ;]] działanie także u siebie, gdzie miałem okazję pierwszy raz zetknąć się od strony użytkownika z tytułowym przekierowaniem. Zauważyłem jednak, że po dodaniu komentarza musiałem sam zatroszczyć się o “nawigację wstecz” do wpisu, ponieważ strona nie zawierała ani elementu meta refresh, ani żadnej innej JavaScriptowej metody przeniesienia na poprzednią stronę. Zasugerowałem więc w jednym z komentarzy, żeby umieściła w kodzie tej strony “coś”, co pozwoli na wygodniejsze korzystanie z tej strony. Ze względu na to, że nie zajmuje się ona programowaniem, z miejsca zostałem poproszony o pomoc.

Kobietom się nie odmawia, dlatego oczywiście zgodziłem się na “wydłubanie” jakiegoś rozwiązania. Trochę to niestety trwało, częściowo przez moje zapominalstwo, a częściowo przez zbliżające się zaliczenia, do których niestety musiałem się przygotować, ale w końcu udało się. Chwilę się nad tym wszystkim zastanawiałem i stwierdziłem, że fajnie byłoby przedyskutować inne sposoby umożliwiania w takim wypadku użytkownikowi powrotu na poprzednią stronę, tak, aby można było wybrać optymalną dla siebie metodę. Zapraszam do lektury.

Wstęp.

Tradycyjnie mamy kilka możliwości na skierowanie użytkownika do odpowiedniego miejsca na naszej witrynie - zarówno po stronie klienta, jak i wspomagając się nieco technologiami po stronie serwera. Mamy zatem metody: W niniejszym wpisie przedstawię sposoby opierające się na kliknięciu przez użytkownika odpowiedniego linku powrotnego, ponieważ zakładam, że na aktualnej stronie, tak jak w przypadku wtyczki Comment Redirect, znajduje się treść, z którą użytkownik powinien się zapoznać, zanim opuści daną podstronę. Myślę, że przekształcenie tego kodu w automatycznie przekierowanie nie będzie dla Was zbyt trudne, w razie czego oczywiście służę pomocą. ;]

JavaScript.

Pierwszy na warsztat idzie oczywiście JavaScript jako rozwiązanie typowe, nie wymagające angażowania serwera w proces generowania informacji o tym, skąd przybył użytkownik, a opierające się wyłącznie na "wewnętrznych" danych przeglądarki.

Obiekt History

Obiekt History, jak sama nazwa wskazuje, pozwala na nawigację po historii przeglądarki użytkownika. Posiada ona kilka metod, z których dwie mogą zostać użyte do nawigacji wstecz:

* Metoda go()

Metoda go() przyjmuje jeden parametr [liczbę całkowitą lub string] będący relatywnym położeniem aktualnej strony w historii od tej, na którą chcemy przejść. Jak nietrudno się domyślić - aby przejść wstecz, należy podać ujemną wartość wymaganego parametru. Zatem kod wynikowy będzie wyglądał następująco [przechodzimy na poprzednią stronę historii]:

1
<a href="javascript: history.go(-1)">Powrót do wpisu.</a>

* Metoda back()

Prostszym sposobem niż użycie metody go() z parametrem -1 będzie wykorzystanie metody back(), która robi to automatycznie:

1
<a href="javascript: history.back()">Powrót do wpisu.</a>

Document.referrer

Mamy też oczywiście możliwość manualnego przejścia do strony, która nas “odesłała” - wykorzystamy zatem atrybut referrer obiektu Document, który zawiera URL strony odsyłającej.

1
<a href="javascript: window.location.href=document.referrer">Powrót do wpisu.</a>

To tyle w kwestii JavaScriptu, zobaczmy co ma do pokazania strona serwera. ;]

PHP.

$_SERVER['HTTP_REFERER']

Strona serwera ma tu akurat niewiele do powiedzenia - wykorzystujemy ją tylko do pobrania adresu URL, z którego przybył nasz wspaniały użytkownik, a reszta mechanizmu jest już tradycyjna:

1
<a href="javascript: window.location.href='<?php echo $_SERVER['HTTP_REFERER'] ?>'">Powrót do wpisu.</a>

Zaletą tego rozwiązania jest to, że możemy w sposób niewidoczny dla użytkownika dokonać sprawdzenia skąd przybył i w przypadku, kiedy np. jest to jedna ze stron potencjalnie niebezpiecznych, mamy możliwość podania innego linka niż ten, który został domyślnie zapisany.

Podsumowanie.

Zdaję sobie sprawę z tego, że liczba sposobów i pomysłów na przeniesienie użytkownika do określonego miejsca w Internecie jest na pewno większa niż zakres zmiennej typu unsigned int w każdym cywilizowanym kompilatorze, ale i tak mam nadzieję, że przyda się Wam takie krótkie podsumowanie. Jeśli macie swoje [inne niż wymienione] ulubione sposoby na udostępnianie tego typu funkcjonalności, podzielcie się w komentarzach, a nuż czegoś się [znowu] nauczę? ;]

PS. Przepraszam za tą dwutygodniową przerwę we wpisach, na swoje usprawiedliwienie mogę jedynie powiedzieć, że przynajmniej zaliczyłem wszystko. Niestety w kolejnym tygodniu nie będę miał dostępu do komputera, więc niestety oznacza to kolejny przestój, ale już 15 lutego będę z powrotem i obiecuję pisać [w miarę] regularnie. ;]