Gyakran látni a weboldalakon "vissza" linkeket. Általában ezek arra a helyre mutatnak, ahonnan valószínűleg jöhetett a felhasználó, rosszabb esetben JavaScript-el vannak megoldva. PHP-vel szépíthetünk egy kicsit ezen. A feladat egyszerű: amennyiben a felhasználó az oldalon "belülről" (a domain névről, jelen esetben) jött, akkor ténylegesen az előzőleg látogatott oldal linkjét tesszük ki, ellenkező esetben egy linket az oldalunk nyitólapjára. Jó esetben rendelkezésünkre áll a Referer (a HTTP protokoll szerint a "hivatkozó" oldal címe), méghozzá a SERVER szuperglobális tömb HTTP_REFERER elemeként. Viszont mi nem az url-re, hanem a domain névre vagyunk kíváncsiak, így szükségünk lesz egy ilyenre:
function getHostFromUrl($url)
{
$url = preg_replace('/^[\\w]{0,10}?:\/\//', '', $url);
while(($newUrl = dirname($url)) != $url && $newUrl != '.')
{
$url = $newUrl;
}
return $url;
}
Ez a függvény egy url-ből kiszedi a domain nevet (pl.: http://www.tutorial.hu/letoltes => www.tutorial.hu), és visszaadja azt. Ehhez még írunk egy másik függvényt, és már készen is vagyunk.
function fromDomain()
{
if(getHostfromUrl(@$_SERVER['HTTP_REFERER']) == DOMAIN)
{
return true;
}
return false;
}
A DOMAIN konstanst én egy config.php-ben hozom létre, így egy esetleges költözéskor biztosan nem felejtjük el átírni:
define(DOMAIN , 'www.tutorial.hu');
És akkor most jöjjön a lényegi rész:
if(fromDomain())
{
print '<a href="' . $_SERVER['HTTP_REFERER'] . '">Vissza</a>';
}
else
{
print '<a href="A kezdő lapod címe">Vissza a főoldalra</a>';
}
A scriptnek azonban van azonban egy buktatója: néhány böngésző egyáltalán nem küldi el a referer-t, néhánynál pedig plusz szolgáltatásként ezt lehet módosítani vagy letiltani és ebben az esetben mindig a főoldalra küld a script.
Harder
Profil