Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

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

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.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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

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

       

Workshop uživatelského testování použitelnosti

DW - Školení použitelnosti
  • Dokonalý web sám od sebe nikdo nevymyslí.
  • Otestujte své řešení se skutečnými uživateli.
  • Naučíme vás, jak testovat rychle, levně a efektivně.
  • Během testování může moderátor udělat desítky chyb - vyvarujte se jich

Detailní informace o workshopu uživatelského testování »

Ohodnoťte jako ve škole:
Průměrná známka 2,92

Přehled názorů

font
integer 24. 3. 2006 07:03
Nový
Pěkná doména
Noone 24. 3. 2006 07:16
Nový
Pěkná doména
Noone 24. 3. 2006 07:16
Nový
Pěkná doména
Noone 24. 3. 2006 07:16
Nový
Pěkná doména
Noone 24. 3. 2006 07:16
Nový
Pěkná doména
Noone 24. 3. 2006 07:16
Nový
Pěkná doména
Noone 24. 3. 2006 07:16
Nový
HTML tagy
Tomáš Večeřa 24. 3. 2006 07:28
Nový
a co funkce urldecode/urlencode
K8 24. 3. 2006 07:41
Nový
Zajímavější řešení
Věroš Kaplan 24. 3. 2006 08:12
Nový
└ 
Re: Zajímavější řešení
khi 24. 3. 2006 23:58
Nový
 
└ 
Re: Zajímavější řešení
luk 25. 3. 2006 13:42
Nový
 
 
└ 
Re: Zajímavější řešení
luk 25. 3. 2006 13:42
Nový
Důkladnější řešení
Jakub Vrána 24. 3. 2006 10:10
Nový
Co kdyz text bude obsazen ve vlastnosti nejakeho tagu?
ziizii 24. 3. 2006 10:22
Nový
Další chyby
Jakub Vrána 24. 3. 2006 11:47
Nový
└ 
Re: Další chyby
Daniel 24. 3. 2006 12:15
Nový
 
├ 
Re: Další chyby
aaa 24. 3. 2006 13:58
Nový
 
│
└ 
Re: Další chyby
Daniel 26. 3. 2006 22:56
Nový
 
│
 
└ 
Re: Další chyby
ziizii 27. 3. 2006 23:16
Nový
 
└ 
Re: Další chyby
Jakub Hegenbart 24. 3. 2006 17:13
Nový
Nechal bych to na prohlížeči
Michal Turek 24. 3. 2006 14:35
Nový
└ 
Re: Nechal bych to na prohlížeči
Darm 24. 3. 2006 15:45
Nový
 
└ 
Re: Nechal bych to na prohlížeči
Jakub Vrána 24. 3. 2006 15:54
Nový
votrepanej a
bzuk & strup 26. 3. 2006 03:59
Nový
└ 
Re: votrepanej a
lukas 26. 3. 2006 20:05
Nový
Trochu OT, ale nenasiel som forum o php
LittleMan 26. 3. 2006 21:57
Nový
└ 
Re: Trochu OT, ale nenasiel som forum o php
zjoova 27. 3. 2006 14:33
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem