Funkce pro přidání css třídy „external“ k externím odkazům

Je tomu již několik dní, kdy jsem rukou praštil do stolu(pro ajťáky klávesnice) a řekl: „Naučím se pořádně regulérní výrazy.“ Tak vám tady předkládám první užitečnou funkci, kterou jsem vytvořil.

Podle doporučení(nepamatuji si přesně kterého) by měly být externí odkazy na stránkách označeny. Většinou se jako označení používá obrázek na kterém je čtvereček se šipkou směřující do pravého horního rohu. Umístění u odkazu bývá různé. Viděl jsem obrázek umístěný na začátku odkazu i na jeho konci, někdy i vysunutý mírně nahoru. Protože by obrázek při vypnutém css nebyl videť, bude zobrazen na konci odkazu text (external). Tolik stručný úvod jaké jsou naše požadavky.

Pro samotné nahrazení je nejvhodnější použít v PHP funkci preg_replace(), ale určitě i v jiných programovacích jazycích podporujících Perl regulární výrazy se najde obdobná funkce.

/*
Funkce, která k externím odkazům ve stringu přidá class="external"
$string = text, ktery chceme upravit
$homeurl = url na root webu

Copyright by Pari 29.11.2007
http://weblog.pari.cz
*/

function doExternalLinks($string, $homeurl) {

//regularni vyraz, ktery vybira co bude nahrazeno
$pattern = '/<a([\sA-Za-z0-9"\']*)href=(?:["\']{1})(http:\/\/[^"\']*)(?:["\']{1})>([^<]*)<\/a>/';
//timto urcime za co bude nahrazeno
$replacement = '<a\\1href="\\2" class="external">\\3</a>';

//escapuje pro regularni vyraz
$addcslashes = addcslashes($homeurl, "/.");
//nahradi homeurl
$string = preg_replace('#'.$addcslashes.'#i', 'HOMEURL', $string);
//prida do stringu tridu external kam patri
$string = preg_replace($pattern, $replacement, $string);
//vrati zpet homeurl
$string = preg_replace('#HOMEURL#', $homeurl, $string);

return $string;

}

Nezapomeňte definovat css třídu external!

.external {
  background: url("images/external.gif") no-repeat center right;
  padding-right: 14px;
}

Funkci jsem nasadil na tomto blogu, toť k názorné ukázce 🙂 Pokud bude zájem, tak zveřejním plugin do WordPressu, který bude automaticky doplňovat třídy k externím odkazům. Nahrazení přes HOMEURL je možná zbytečný mezikrok, ale nepovedlo se mi to udělat najednou, pokud víte jak na to, napište mi to v komentářích.

Možná vylepšení

  • důsledněji kontrolovat, jestli se jedná o správnou url, ikdyž to by měla mít na starosti fce vytvářející odkazy
  • umožnit použití více css tříd, neboli pokud již odkaz nějakou třídu obsahuje, tak ji převzít

Informační zdroje o regulárních výrazech



Komentáře

Zatím nikdo nepřidal komentář, můžete být první.



O autorovi

Pari

Vítejte na mém blogu, rád bych se v krátkosti představil. Je mi 26 let. Momentálně nejvíce času věnuji projektu Lepime.cz - obchod se samolepkami na zeď a tvorbě webů postavených na redakčním systému Drupal pod značkou MEPA.CZ.