Hlavní navigace

PHP Trik: návštěvníci z vyhledávačů

Tomáš Líbal

Chcete zvýšit komfort prohlížení vašich stránek? Významná část návštěvníků na váš web jistě přišla přes internetový vyhledávač. Můžete jim usnadnit nalezení těch pravých informací, které hledají, například zvýrazněním vyhledávané fráze na vašich stránkách.

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čů:

Proměnné 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.

Anketa

Vítáte jako čtenář podobné obarvení textu dle vyhledávače?

Našli jste v článku chybu?
27. 3. 2006 23:16
ziizii (neregistrovaný)
Osobne jsem se toho teda nejvic naucil behem nucenych praci :-)
27. 3. 2006 14:33
zjoova (neregistrovaný)
pouzit mod-rewrite, z adresy www.nieco.sk/clanok/nadpis-clanku presmerovavat treba na www.nieco.sk/clanok.php?nadpis=nadpis-clanku, v PHPku pak pokladat dotaz ve smyslu "SELECT clanek FROM databaza WHERE transformuj_nadpis(naddpis_db) = nadpis". Bud takhle pres uzivatelskou fci v db nebo rychleji pri ukladani clanku do db rovnou ukladat i nadpis bez diakritiky, s pomlckami. Viz tez http://www.root.cz/clanky/coz-si-tak-trochu-zaprepisovat/