Ukázka, jakým způsobem lze řešit tlačítko zpět. Filosofické úvahy typu "proč suplovat na stránkách funkci prohlížečů" pominu a ukážu pouze praktické řešení s alternativou v javascriptu.
Vystačíte-li si s javascriptem, stačí udělat velmi jednoduchý odkaz.
<a href="javascript:history.go(-1)">Zpet</a>
Následující kód se podívá do historie prohlížeče a zobrazí předposlední zobrazenou stránku.
Jistě, je to řešení. Ale má to malinkou vadu na kráse. To, že si javascript může člověk vypnout sice je argument, ale v dnešní době by si takový člověk moc stránek asi nezobrazil.
Dalším argumentem proti javascriptu může být fakt, že návštěvník přišel z vyhledávače nebo katalogu. Výše zmíněný kód by návštěvníka po stisku odkazu „zpět“ vrátil na vyhledávač, což asi také např. majitel eshopu nechce. I tento problém lze vyřešit pomocí javasciptu.
<a href="javascript:history.go('pecan.cz')">Zpet</a>
Tento kód návštěvníka vrátí na poslední navštívenou stránku, která obsahuje „pecan.cz“. Takový odkaz „zpět“ ale může vést za určitých okolností ke zmatení návštěvníka.
PHP
Následující řešení v php bude zobrazovat odkaz zpět pouze tehdy, má-li to význam.
Využijeme sessions a dvě funkce, které se nám budou o sessions starat. Funkce budou uložené v externím souboru funkce.php.
<?php
/**
* Správa session, zaznamenávání historie navštívených stránek.
*/
function GoBackHandler()
{
// spočítáme počet klíčů v poli
$pocet = count($_SESSION['BACK_URL']);
// pokud není poslední položka stejná jako aktuální stránka budeme pokračovat
if($_SESSION['BACK_URL'][$pocet - 1] != $_SERVER['REQUEST_URI'])
{
// pokud se nejedná o krok zpět, přidáme aktuální stránku do session
if(!isset($_GET['GoBack']))
{
$_SESSION['BACK_URL'][] = $_SERVER['REQUEST_URI'];
}
else
{
// jedná se o krok zpět, poslední položku v poli tedy chceme smazat.
if(is_array($_SESSION['BACK_URL']))
{
// smažeme poslední položku v poli.
array_pop($_SESSION['BACK_URL']);
}
}
}
}// GoBackHandler
/**
* Funkce vrací odkaz na poslední navštívenou stránku.
* @return string
*/
function GoBackLink()
{
// je pole?
if(is_array($_SESSION['BACK_URL']))
{
/*
echo "<pre>";
var_dump($_SESSION['BACK_URL']); // pomoc při testování - echuje obsah session
echo "</pre>";
*/
// spočítá počet prvků v poli a vrátí nám klíč předposledního pole.
$last = count($_SESSION['BACK_URL']) - 2;
// pokud takový klíč pole existuje, vypíše odkaz zpět
if(array_key_exists($last, $_SESSION['BACK_URL']))
{
// Spočítáme, kolik je v posledním odkazu otazníků. Do odkazu potřebujeme dát informaci, že se jedná o krok zpět.
$question_mark = substr_count($_SESSION['BACK_URL'][$last],"?");
if($question_mark >= 1){
$QueryString = "&GoBack";
}else{
$QueryString = "?GoBack";
}
// Vrátíme odkaz na stránku zpět.
return "<a href='".$_SESSION['BACK_URL'][$last].$QueryString."'>Zpět</a>";
}
}
return false;
} // GoBackLink
?>
Praktická ukázka použití funkcí:
<?php
session_start(); // nastartujeme session - musí být na každé stránce!
include_once "funkce.php";
GoBackHandler(); // Správa historie.
?>
<html>
<head>
<title>Zpět v php</title>
</head>
<body>
Text....
<?php
echo GoBackLink(); // zobrazení odkazu "Zpět"
?>
</body>
</html>
Funkční online ukázku naleznete na adrese pecan.cz/ukazky/zpet.
Stažení ukázkového příkladu – zde.
První
Už jsem myslel, že to tu umřelo, ale naštěstí ještě ne.
Jinak dobrá práce Pecane, jen tak dál!
Hologos: dík, pokusím se ![]()
Lord AgEnT: Tak pevné nervy a šťastnou ruku!
foxkill3r: zatím nevím, vím jen to, že jsem tam přidával nové věci psané pro PHP5, takže pokud něco vydám, bude to php4 nekompatibilní.
Pecane tak tohle se ti povedlo hled to aplikuju k sobe misto
javascript –1
fakt pěkný … jen tak dál
neni poro seo lepsi tam rovnou hodit primej link, nez jen goback?
Možná by bylo lepší napsat to session_start(); napsat na začátek souboru funkce.php
To si nemyslim tedy. session_start se ma poustet ve startovacim souboru a ne v nejakym, ktery nekam includujes … , neprispiva to na citelnosti
měl bys připojit upozornění, že toto řešení vylučuje cacheování stránek, takže při každém požadavku se musí vygenerovat nová stránka
Ahoj peCan, po dlhanskej dobe som to tu objavil :) nuz, celkom som sa pobavil, teda nemyslim to v zlom, samozrejme javascriptove tlacitko s5 ma nevyhodu pri vypntom JS, ale pisat 30 riadkovy script i tak si myslim ze ludia, ktori sa do internetu nevyznaju pouzivaju radsej tlacitka na prehliadaci a ti ktori nim ziju maju na to uz svoje metody :) ako napriklad gestikury alebo klavesove skratky :) ale zas „why not“ :)
**Tlustě**
*Kurzíva*
"Odkaz":http://neco.cz nebo http://neco.cz (i www.neco.cz)
/---code php
php kód
\---