Užitečné funkce pro PHP - díl 3.

MyEgo.cz

home foto blogy mywindows.cz kontakt

Užitečné funkce pro PHP - díl 3.

PHP 14.08.04

Jeden z častých problémů weblogů je ten, že obsahují velké množství externích linků, takže de-facto reprezentují takovou malou link-farmu. Nic dobrého pro Google Page Rank. S PHP se to dá velice vhodně řešit. V případě BLOG:CMS je to celé možné napsat jako plugin.

Kód používá jednu z nejmocnějších funkcí v PHP, a to preg_replace_callback. Je dobré se s ní pořádně seznámit.

Vlastní implementace je pak poměrně jednoduchá. Uvedený objekt nám převede libovolný text tak, že veškeré externí linky budou směrovat na Váš vlastní web a otevírány přes proměnnou url. Ve spojení s NP_Cache je to možné dělat i za běhu serveru, nikoliv jen při ukládání.

<?php
class SEO {
 // inicializace
 function SEO(){
   global $_SERVER;
   $this->server = $_SERVER['HTTP_HOST'];
   $this->redirect = '/redirect/';
 }
 // převede externí linky v textu na
 // URL typu /redirect/?url=http://externi
 function _SEO(&$text){
   $text = preg_replace_callback(
   '/<a(.*?)href=[\"|\'](.*?)[\"|\']/',
   array(&$this, 'myLink'),
   $text);
 }
 // callback funkce, převede linky, které nejsou na moji
 // doménu, a obsahují URI na SEO-friendly formát
 function myLink($m){
   if (strstr($m[2],$this->server) || 
       ( !strstr($m[2],'http://') && 
         !strstr($m[2],'//') &&
         !strstr($m[2],'ftp://') ) )
     return '<a'.$m[1].'href="'.$m[2].'"';
   else
     return '<a'.$m[1].'href="'.
      $this->redirect.'?url='.$m[2].'"';
 }
} // end class SEO
?>

Samozřejmě musíme vytvořit na serveru i adresář /redirect/ a v něm soubor index.php, s tímto obsahem:

<?php
function undoMagic($data) {
 return get_magic_quotes_gpc() ? stripslashes($data) : $data;
}
header('Location: '.undoMagic($_GET['url']));
?>

Následné použití této funkce si snad již umí každý odvodit:

<?php
  $seo=& new SEO();
  $seo->_SEO($text);
?>

Komentáře

  1. 1 johno 15.08.04, 03:08:16
    FB

    Radku $_SERVER je superglobálna premenná a je preto zbytočné ju explicitne označovať ako globálnu kódom global $_SERVER;

  2. 2 Radek Hulán 15.08.04, 03:08:23
    FB

    [1] to samozřejmě ano, toto vyplývá z mého stylu kódování, i superglobální proměnné zásadně deklarovat uvnitř funkce.. Dá se tím vyvarovat pár chybám, protože proměnné v PHP (koncepce) mají hodně špatný návrh (oproti třeba C++)..

  3. 3 johno 15.08.04, 03:08:26
    FB

    [2] Akým chybám napríklad?