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
Přidej vlastní názor
Ty