V čem to spočívá?
Jedná se o php skript, který pomůže návštěvníkům rychleji nalézt v textu na vaši stránce hledaný výraz tím, že zvýrazní hledaná slova na stránce. Probereme si jednu z možností, jak na to.
Pokud návštěvník nezadá přímo ve webovém prohlížeči adresu vašich webových stránek, je v HTTP hlavičce referer uložena URL adresa, ze které přišel na aktuální stránku. Metoda následujícího skriptu toho využívá. Z adresy zjistíme, jestli uživatel přišel z internetového vyhledávače. Pokud ano, tak téměř každý vyhledávač má hledaná slova přímo v URL adrese. Tato slova jsou uložena v proměnné, která se liší podle typu vyhledávače. V mém příkladu je použito pole s různými písmeny, které používají velké vyhledávače. Jednotlivá slova nebo fráze jsou v této proměnné oddělena zpravidla znaménkem plus. Skript jednoduše přidá na začátek a konec každého hledaného slova v textu, který byl předtím například nahrán z MySQL databáze, html tagy font s nastaveným stylem, tak, aby měla slova odlišnou barvu pozadí.
Zdrojový kód :
<?php
$url_referer = $_SERVER['HTTP_REFERER'];
$vyhledavace = array('google.com','centrum.cz','seznam.cz');
// Zjistime nazev domeny odkud prichazi navastevnik
// Odstranime "www." a zkontroujem zda prisel z vyhledavace
$host = parse_url($url_referer);
$host = eregi_replace("www\.","",$host['host']);
foreach($vyhledavace as $server)
{
if($host == $server)
{
$promenne = array('q','qs','w');
$pozice = stripos($url_referer,"?");
// Odstranime domenu, a nechame si v promene "$text" jenom promene z URL adresy
$text = substr($url_referer,$pozice+1,strlen($url_referer));
// Rozdeli "$text" na pole s promenyma z URL adresy
$pole = explode("&",$text);
$pocet = count($pole);
if($pocet > 0)
{
$i = 0;
// Text, se kterym budeme pracovat. Muze to byt napriklad text z MySQL databaze.
text = "Krymah pesost zahrokrám ptástéš v hrazovpě Sémý a sabanou pisup ďamou
sodmifu Sudřouň bělapuř vivou vránnéčo k řuběp";
while($i < $pocet)
{
// Nyni pracujeme s jednotlivymi retezci ve formatu promena=hodnota
// Rozdelime proto retezec na dve hodnoty oddelene rovnitkem
// Nove pole "hodnoty" pak bude mit nasledujici strukturou "promena" => "hodnota promene"
$hodnoty = split('=', $pole[$i]);
foreach($promenne as $query_string)
{
// Pokud se promenna(query string) nachazi v poli s promennyma tak v nasem textu barevne zvyraznime podklad slov
if($query_string == $hodnoty[0])
{
$kontrola = strpos($hodnoty[1],"+");
// Pokud bylo v dotazu vice slov provede zvyrazneni slova pro kazde slovo zvlast
if(!$kontrola === false)
{
$slova = explode("+",$hodnoty[1]);
$pocet = count($slova);
$upraveny_text = $text;
for($i=0;$i <= $pocet;$i++)
{
$upraveny_text = str_replace($slova[$i],"<font style='color:#000000;background-color:#e2e2e2;'>".$slova[$i]."</font>",$upraveny_text);
}
echo $upraveny_text;
}
// Zvyrazneni v textu, pokud byl vyhledavan jeden vyraz
else
{
$upraveny_text = str_replace($hodnoty[1],"<font style='color:#000000;background-color:#e2e2e2;'>".$hodnoty[1]."</font>",$text);
echo $upraveny_text;
}
}
}
$i++;
}
}
}
}
?>
Pokud chcete přidat do skriptu podporu pro další vyhledávač, stačí připsat do pole „vyhledavace“ název serveru a doménu prvního řádu. Pokud server používá jiný název proměnné pro vyhledávání, pak přidejte do pole „promenne“ její název. Tabulka názvů proměnných u vybraných vyhledávačů:
Vyhledávač | Proměnná |
Google.com | q |
Seznam.cz | w |
Centrum.cz | q |
Atlas.cz | q |
Yahoo.com | p |
Aol.com | query |
Wikipedia.com | search |
Jyxo.xz | q |
Slunecnice.cz | qs |
Vylepšení skriptu
Vyhledávače většinou kódují písmena s diakritikou, proto je vhodné přidat do kódu jejich zpětné dekódování na normální znaky.
Vytvoříme si proto pole s názvem „znaky“ se strukturou „kódovaný znak“ ⇒ „dekódovaný znak“ a pomocí funkce strtr přeměníme zakódované znaky v hledaných slovech na písmena s diakritikou. Přeměnu provedeme jako na pole „hodnoty“:
<?php
$znaky = array("%EC" => "ě","%B9" => "š","%E8" => "č","%F8" => "ř","%BE" => "ž","%FD" => "ý");
$hodnoty[1] = strtr($hodnoty[1],$znaky);
?>
Řádek, kde se převádí znaky v poli „hodnoty“ umístíme nad řádek, ve kterém se přidávají tagy „font“. Tak i na pole slova
<?php
$slova[$i] = strtr($slova[$i],$znaky);
?>
Tento kód umístíme za řádek, na kterém se vytváří pole „slova“ pomocí funkce explode.