Celé to funguje velmi jednoduše. Pomocí cronu se do systému nahrávají každou hodinu nejnovější data z cnb.cz a nahrají do databáze WordPressu. Samotné vypsání na webu pak probíhá pomocí shortcode mena, kde si nastavíte jakou částku na jakou měnu převést.
Nejdříve ale k samotnému scriptu. První částí je zmiňovaný cron a parsování dat z čnb:
add_action('cron_hodina', 'nactiKurzy'); function crn_activation() { if (!wp_next_scheduled('cron_hodina')) { wp_schedule_event(time(), 'hourly', 'cron_hodina'); nactiKurzy(); } } add_action('wp', 'crn_activation'); function nactiKurzy() { $meny = explode("\n", file_get_contents('http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt')); unset($meny[0]); unset($meny[1]); $data = array(); foreach ($meny as $mena) { $parametry = explode("|", $mena); if ($parametry[3]) { $data[$parametry[3]]['pocet'] = $parametry[2]; $data[$parametry[3]]['kurz'] = str_replace(',', '.', $parametry[4]); } } if ($data) update_option('kurzy', $data);
Tím se dostanou potřebné kurzy do databáze. Shortcode mena vypadá následovně:
function mena_func($atts) { extract(shortcode_atts(array( 'castka' => 1, 'z' => '', 'do' => 'CZK', 'desetiny' => 2 ), $atts)); $return = ""; $castka = str_replace(',', '.', $castka); $meny = get_option('kurzy'); if ($do == 'CZK' and $z == 'CZK') $return = $castka; elseif ($do == 'CZK') { $kurz = $meny[$z]['kurz']; $pocet = $meny[$z]['pocet']; $return = $kurz * ($castka / $pocet); } elseif ($z == 'CZK') { $kurz = $meny[$do]['kurz']; $pocet = $meny[$do]['pocet']; $return = $castka / ($kurz / $pocet); } return number_format($return, $desetiny, ',', ' '); } add_shortcode('mena', 'mena_func');
A teď k samotnému použití. Shortcode [mena] má 4 parametry z nichž jeden je povinný.
Parametry:
z – jediný povinný parametr, určuje z které měny se převádí
do – parametr do naopak určuje, do které se převádí, ve výchozím stavu je nastaven na CZK, mějte na paměti, že alespoň jeden z nich musí být česká koruna
castka – částka, která se má převádět, ve výchozím stavu 1
desetiny – kolik desetinných míst se má zobrazit
Například [mena z=CZK do=USD castka=1000 desetiny=1] převede 1000 korun na dolary a vypíše s jedním desetinným místem.
4 responses to “Shortcode – kurzy české koruny”
Skvělé! Díky Michale 🙂
Jenom malá oprava. Na řádku 13 u prvního skriptu chybí lomítko. Výsledek by měl vypadat takto:
$meny = explode(“\n”, file_get_contents(‘http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt’));
Jenom malá oprava. Na řádku 13 u prvního skriptu chybí lomítko. Kód by měl vypadat takto:
$meny = explode("\n", file_get_contents('http://www.cnb.cz/cs/financni_trhy/devizovy_trh/kurzy_devizoveho_trhu/denni_kurz.txt'));
Díky, editor mi to musel špatně přelouskat, když jsem to do něj kopíroval.