Ako na automatické vysvetlivky skratiek v texte
Na viacerých blogoch som si všimol, že jednotlivé skratky, ktoré sú v texte použité, sú pri ich (prvom) výskyte automatický vysvetlené pomocou tagu acronym. Celkom sa mi to zapáčilo, tak som sa rozhodol naprogramovať si podobnú funkciu, ktorú v CMS zavolám na text článku a tá mi automaticky vygeneruje takého vysvetlivky.
Základom správneho fungovania je dostatočne rozsiahla databáza skratiek. Keďže som na internete žiadnu použiteľnú databázu v textovom formáte nenašiel, rozhodol som sa urobiť si vlastnú s tým, že ju budem podľa potreby priebežne dopĺňať. Ako formát uloženia som zvolil textový súbor v tvare Skratka = vysvetlenie, teda:
PHP = PHP Hypertext Preprocessor
XHTML = eXtensible Hypertext Markup Language
XML = eXtensible Markup Language
AJAX = Asynchronous Javascript and XML
CMS = Content Management System
.
.
.
PHP funkcia na nahradenie Skratiek -> za skratka nie je zložitá. Funkcia načíta dátový súbor, ten potom rozdelí na dve polia; pole so skratkami a pole s vysvetleniami. Na samotné nahradenie sa použije funkcia preg_replace(mixed pattern, mixed replacement, mixed subject [, int limit]) s použitím nepovinného parametra limit s hodnotou 1, čo zabezpečí, že každá skratka bude vysvetlená iba pri svojom prvom použití. Použitie triedenia pomocou funkcie ksort( array pole [, int sort_flags] ) je nepovinné, manuál ho však odporúča.
function get_acronyms(&$text) {
$data = file("acronyms.txt");
$patterns=array();
$replacements=array();
for ($i=0;$i<count($data);$i++) {
$tmp = explode("=",$data[$i]);
$patterns[$i]="/\b(".trim($tmp[0]).")\b/";
$replacements[$i]="<acronym title=\"".trim($tmp[1])."\">\\1</acronym>";
}
ksort($patterns);
ksort($replacements);
$text = preg_replace($patterns, $replacements, $text,1);
}
Následné použitie je už úplne jednoduché.
get_acronyms($string);
Doplnené: Od Roberta Madaja (spravodaj.madaj.net) som dostal jeho databázu acronym.db, má podobný formát, len výrazy sú oddelené bodkou, v prípade použitia tejto databázy zmeňte prvý parameter funkcie explode na bodkou.