Hlavní navigace

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

24. 3. 2006
Doba čtení: 3 minuty

Sdílet

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“:

CS24_early

<?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.

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

Byl pro vás článek přínosný?