ČNB – česká národní banka

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
h4kuna
Backer | 740
+
0
-

ČNB

Integrace do Nette

Zdravím měl bych pro vás třídu která pracuje s kurzovním lístkem ČNB užitečné pro eshopy

  • nebudete li ji požívat v závislosti na Nette použijte třídu Cnb, s Nette je určená NCnb a pro šablony CnbNette
Popis co umí
  • práce se session (pouze ve spolupraci s Nette) nativne ukládá poslední použitou měnu a zobrazení s dph nebo bez
  • lze použít i pro zahraniční e-shop, protože nemusí využivat kourunu českou
  • nezáleží na používání velikosti písma při definování měny např:(EUR, eur, eUr)
  • metoda format() upravý měnu podle uživatelsky definované předlohy, výsledek tvoří validní UTF-8, tzn: usd->$1 000.00, eur->€1.000,00, czk->1 000 Kč, vše lze měnit
  • ukládá si jednu zálohu, kdyby došlo k špatnému stažení z ČNB tak si načte předchozí hodnoty
  • vrací datum/timestamp posleslední aktualizace podle stáří souboru
  • stahuje všechny dostupné měny na cnb.cz cca 160 (némá vliv na výkonnost)
  • podpora zobrazení cen s dph
  • korekcre kurzu, tzn. lze procentuelně zvednout kurz, či snížit

Instalace
stačí stáhnout, rozbalit, vytvořit instanci třídy

Příklad

$cnb = new Cnb('rub');//vychozi jednotky máte v czk a budou se prepocitavat na rubly
$cnb->change(158);//převede 158 czk na rub
$cnb->change(158, 'rub', 'usd');// převede 158 rub na usd
$cnb->format(158);//97 Rub
$cnb->formatVat();//116 Rub
$cnb->getCode();//Rub

Čekám návrhy, nápady…

Editoval matata (20. 10. 2010 0:54)

jasir
Člen | 746
+
0
-

matata napsal(a):
Čekám návrhy, nápady…

Já sice zatím podobnou funcionalitu nepotřebuji, takže jsem třídu ani nevyzkoušel. Mám pár spíš formálních připoínek. Moc se mi nelíbí jména metod – doporučoval bych je přepracovat aby jméno metody obsahovalo sloveso, tedy například
changer()change() – a podobně. Jména metod by také měla být co nejvýstižnější a klidně i delší.
Například getCode()getMoneyCode().

A taky jména tříd malými písmeny jsou divná, ale to už záleží na vkusu každého soudruha.

Jinak to vypadá hezky… ;-)

h4kuna
Backer | 740
+
0
-

Například getCode()getMoneyCode().

metody getCode(), getSymbol() …, tahají data z pole $this->rating a get"název klíče" odpovídá metodě

A taky jména tříd malými písmeny jsou divná, ale to už záleží na vkusu každého soudruha.

beru upraveno

Editoval matata (14. 6. 2009 17:13)

Inza
Člen | 330
+
0
-

Velmi dobrá práce matato – hodil bys to pls do Nette/extras do doku?

oaki
Člen | 11
+
0
-

vyborna vecicka. Len na niektorych serveroch je zakazane pouzivat funkciu fopen. Mozno by stalo zato spravit driver cez CURL. Co vy nato?

h4kuna
Backer | 740
+
0
-

oaki napsal(a):

vyborna vecicka. Len na niektorych serveroch je zakazane pouzivat funkciu fopen. Mozno by stalo zato spravit driver cez CURL. Co vy nato?

Prosim te, nekde ti to nemakalo?

fopen by nemel bejt zakazanej kdyz s nim vytvaris soubory i na svym serveru. Maximalne ze s nim nesmis mimo server coz s tim jsen se nesetkal, ale muze to mit zakazany server kterej chces cist, avsak CNB to ma povoleny jinam to nepotrebuju.

Mrknu na to jak to udelat pres CURL.

Aurielle
Člen | 1281
+
0
-

Myslím, že oaki měl na mysli vypnutou direktivu allow_url_fopen

h4kuna
Backer | 740
+
0
-

Jelikož DOPLŇKY zatim nejdou upravovat, tak sem dam odkaz na novou verzi CNB v 1.0

Noveho:

  • stahovani pomoci CURL
  • libovone nastaveni formatovani pro kazdou menu zvlast pres metodu format()
  • tzn mate czk → 15 365 Kč, usd → $1,955.35, gbp → Ł1 568.45
  • je nekolik men prednastavenych staci vytvorit instanci

Doporucuji pri uprave hodnot tridu podedit a menit vlastnosti „property“ protected a zaroven je prohlidnou co umi.

<?php
if(!isset($_GET['m']))
{
    $_GET['m']=null;
}

$cnb    =new Cnb($_GET['m']);
echo $cnb->format(100);
?>

do prohlizece staci pridat ?m=… jednu z techto hodnot czk, eur, usd, pln, gbp, rub

Editoval matata (10. 6. 2010 10:28)

h4kuna
Backer | 740
+
0
-

Zdravim,

nova verze 1.1, vice info v doplnkach

  • stahuje kompletne cely kurzovni listek a nacte se online pouze prepocet ktery bude potreba
  • tzn nemusite premyslet nad tim jake vsechny meny budete potrebovat
  • vsechny dostupne meny ziskate pomoci metody getAllCode()
  • vylepsena metoda format(), nyni si lze nastavit z ceho na co prepocitat a zformatuje podle nastaveni

Editoval matata (7. 12. 2009 17:42)

h4kuna
Backer | 740
+
0
-

Zdravim značně jsem zlepšil intrgraci ČNB do Nette v presenteru stačí zadat:

<?php
//udelejte Copy/Paste
CnbNette::register($this->template, 'dph' /*true rovnou zobrazuje ceny s dph*/);
?>

v 1.5.2

Repozitář

Editoval matata (19. 7. 2010 22:58)

dotTwelve
Člen | 167
+
0
-

ahoj, komponenta vyhazuje Class 'Cnb' not found

h4kuna
Backer | 740
+
0
-

Omlouvám se máš to tam :)

edit

v1.7

Editoval matata (20. 6. 2010 8:57)

dotTwelve
Člen | 167
+
0
-

Na stazeni v doplncich je odkaz, kterej vede na verzi 1.6.2

h4kuna
Backer | 740
+
0
-

Poznas to podle toho ze uvnitr balicku uz je soubor Cnb.php vsechny odkazy vedou na jeden soubor cnb.zip mrkni na to jeste jednou, pac ja to vsechno prohlid a me to maka.

dotTwelve
Člen | 167
+
0
-

Tady https://componette.org/search/?… mi to vypisuje odkazy na stazeni cnb.zip ve formatu: https://files.nette.org/162/cnb.zip

h4kuna
Backer | 740
+
0
-

to nicemu nevadi to cislo 162 neni verze baliku a znamena neco jinyho to neovlivnuju, je to jenom hricka osudu. Kazdopadne mrkni do baliku a uz tam je soubor Cnb.php a v anotaci je @version 1.7, 7. radek

Editoval matata (20. 6. 2010 9:37)

dotTwelve
Člen | 167
+
0
-

Ja to proste nechapu, stahnu to a kdyz to otevru, tak tam proste soubor cnb.php nemam. Prosim te posli mi to kdyztak do mejlu MachacJan@gmail.com. Diky!

Jakub Šulák
Člen | 222
+
0
-

Ahoj, jen detail:
V poslední verzi máš myslím chybu na řádce 235 Cnb.php.

$array =get_class_methods($this->actualClassc);

// jedno „c“ na konci proměnné navíc

h4kuna
Backer | 740
+
0
-

Diky ti, opraveno

EDIT tato chybka tam byla od verze 1.5.2 od 7. června 2010

Editoval matata (24. 6. 2010 13:38)

despiq
Člen | 320
+
0
-

v cnbHistory je MATH::::stroke2point
ma to tam byt?

h4kuna
Backer | 740
+
0
-

ahoj posledni mesic komponenta prosla velikou zmenou a stahovani historie je pozadu a neaktualni.

Misto Math tam dej parent respektive kdyz tam bude jeste neco tak parent.

Ja na to mrknu az se vratim dom.

Editoval matata (14. 7. 2010 21:48)

despiq
Člen | 320
+
0
-

to ja vedel co tam dat :) slo mi spis o to jestli to vis nebo ne, taky sem nenasel nastaveni temp adresare kam se ukladaj soubory, pridat si to nebyl problem spis mi slo o to ze by to tam asi melo byt, kazdemu nemusi vyhovovat strkat ty soubory k indexu

pokud to tam je tak se omlouvam za prekouknuti

h4kuna
Backer | 740
+
0
-

Ahoj, jo vím o tom. :) V komponentě je spousta nastavení. A komponenta je primárně pro použití bez nette je to popsané na stránce v addons

<?php
class CnbHistory extends /*přepiš na*/ NCnb
?>

Nastavení tempu uděláš tak že přetížíš metodu

<?php
protected function getTemp()...
?>

zatím takhle než to všechno projdu a opravím tohle mě napadá z hlavy

Editoval matata (16. 7. 2010 20:38)

thonzak
Člen | 7
+
0
-

Ahoj,

zkouším si hrát s modulem Cnb (bez historie) 1.8 v Nette (0.9.x verze) a je tam pár věcí, které mne matou, resp. vypadají, že nefungujou. Než se v tom budu vrtat dále, rád bych se ujistil, co si o stávajícím stavu myslí autor :)

  1. „moc mi nefunguje“ nastavení defaultní měny a dph: možná nechápu přesně, co má být v těch parametrech, a nejsem si jistý, jestli tam nedošlo k nějaké refaktorizaci ?

V příkladu / dokumentaci je:

<?php
 CnbNette::register($this->template, 'curr', 'dph' /*true rovnou zobrazuje ceny s dph*/);
?>

Ale v kódu (CnbNette.php):

<?php
    static public function register(Template $obj, $vat=false, $currency='currency')
?>

Takže a) ‚curr‘ vs. ‚currency‘ (tam se má dát předpokládám defaultní měna, takže CZK, EUR,…? Ale pak nechápu tu defaultní hodnotu v CnbNette. a b) pořadí proměnných $vat a $currency – to je zřejmě chyba?

  1. Pokud je $vat nastavená na false (resp. nezabralo ani true, ‚TRUE‘ (nebo obecně neprázdný řetězec) naopak jo) a použije se helper vat v template, Nette protestuje, že helper není k dispozici. To je bug nebo feature?
  2. předávání parametru v URL ?curr=XYZ&dph=0 apod nefunguje, resp. po čistém deploymentu a promazání tempu a cookies zafunguje jednou, poté už nemá na stránku žádný vliv.

V případě potřeby / zájmu se v tom můžu povrtat hloubějc, ale pro začátek bych rád věděl, na čem jsem – jestli je moje konfigurace vůbec podporovaná a/nebo to není jen obecně můj bordel :)

Díky za reakci,

TH

h4kuna
Backer | 740
+
0
-

Oka tak to rozjedem :)

thonzak napsal(a):

pořadí proměnných $vat a $currency – to je zřejmě chyba?

ano, správně:

<?php
CnbNette::register($this->template, 'dph'/*true rovnou zobrazuje ceny s dph*/, 'curr');
?>

defaultní měnu pokud si ji nezvolíš nastaví se Cnb::$defMoney; ted tam je CZK

Ostatní musím prověřit

EDIT:

ukázku jsem opravil a je zase funkční

Editoval matata (19. 7. 2010 18:20)

h4kuna
Backer | 740
+
0
-

thonzak napsal(a):

<?php
    static public function register(Template $obj, $vat=false, $currency='currency')
?>

Takže a) ‚curr‘ vs. ‚currency‘ (tam se má dát předpokládám defaultní měna, takže CZK, EUR,…? Ale pak nechápu tu defaultní hodnotu v CnbNette.

To právě není defaultní měna ale nazev url parametru tzn curr = v url ?curr=eur, ok?

  1. Pokud je $vat nastavená na false (resp. nezabralo ani true, ‚TRUE‘ (nebo obecně neprázdný řetězec)

naopak jo) a použije se helper vat v template, Nette protestuje, že helper není k dispozici. To je bug nebo feature?

<EDIT>

To je feature pac když máš $vat bool tak napevno definuješ zda budou s dph nebo bez dph tzn TRUE|FALSE, ale když tomu dáš řetězec tak říkaš že si budeš přepínat respektivě to nechaš na uživateli

</EDIT>

  1. předávání parametru v URL ?curr=XYZ&dph=0 apod nefunguje, resp. po čistém deploymentu a promazání tempu a cookies zafunguje jednou, poté už nemá na stránku žádný vliv.

nepomůžu stahl jsem i verzi 0.9.5 a 1.0 a na obou to jede v pořádku

V případě potřeby / zájmu se v tom můžu povrtat hloubějc, ale pro začátek bych rád věděl, na čem jsem – jestli je moje konfigurace vůbec podporovaná a/nebo to není jen obecně můj bordel :)

sem haž všechno na co přijdeš, já tam můžu mít chyby

Díky za reakci,

není zač

Editoval matata (19. 7. 2010 18:38)

thonzak
Člen | 7
+
0
-

Ahoj,

děkuju za bleskovej support :)

matata napsal(a):

thonzak napsal(a):

<?php
    static public function register(Template $obj, $vat=false, $currency='currency')
?>

Takže a) ‚curr‘ vs. ‚currency‘ (tam se má dát předpokládám defaultní měna, takže CZK, EUR,…? Ale pak nechápu tu defaultní hodnotu v CnbNette.

To právě není defaultní měna ale nazev url parametru tzn curr = v url ?curr=eur, ok?

Jo, tím se to vysvětluje, a tím se taky vyřešil zbytek problémů.
Možná by to chtělo v tomto směru trochu víc zblbuvzdornět dokumentaci :)

Ještě jednou děkuju,
T.

h4kuna
Backer | 740
+
0
-

Hod navrh jak pač to v dokumentaci je a je to i v anotacich. Já vím jak to funguje tak mi ukaž tvůj pohled.

A jinak to maka v poho? Dělá to co si přeješ?

Editoval matata (19. 7. 2010 21:27)

thonzak
Člen | 7
+
0
-

matata napsal(a):

Hod navrh jak pač to v dokumentaci je a je to i v anotacich. Já vím jak to funguje tak mi ukaž tvůj pohled.

Jo, to, jak jsi to teď upravil, už je asi srozumitelné. Možná to z toho bylo jasné i předtím a já jenom zpanikařil / nechal se rozhodit tím $currency=‚currency‘ vs. ‚curr‘ v ukázce a přehozením dph a currency v příkladu :)

A jinak to maka v poho? Dělá to co si přeješ?

Zatím to vypadá, že to umí, co potřebuju.

Korekce kursu je via member proměnnou třídy Cnb $correction ? Plánuješ k tomu dodělat nějaký getter/setter?

h4kuna
Backer | 740
+
0
-

thonzak napsal(a):
Korekce kursu je via member proměnnou třídy Cnb $correction ? Plánuješ k tomu dodělat nějaký getter/setter?

ne uprav si to přetížením třídy takto:

<?php
class MyCnb extends NCnb //Cnb - pokud nepoužijete Nette
{
//pro SLOVENSKO
   protected $defMoney   ='EUR';
   protected $vat  =1.19;//dph 19%

//protected $fontSize  =2;
//protected $refresh   =86400;
//atd kdybych na to vše měl dělat getter/setter .........
//skoro všechny parametry a nastavení jsou potřeba už v konstruktoru

    protected $correction    =1.05;
//zde si dělej všechny své úpravy například
    const COUNTRY= 'world';//začne ti stahovat jméno státu
    //konstanty jsou nastavené na false protože všechna data pak se ukládaj do cache a z cache do paměti
    //takže jsou povolený jen nejdůležitější
}
//doporučuji vlastní úpravu
Cnb::$defineMoney   =array(
'CZK'=>array('1 Kč', 0, ',', ' '),
'EUR'=>array('1€', 2, ',', '.')
'USD'=>array('$1', 2, '.', ','));

//v presenteru
CnbNette::$nameClass = 'MyCnb';
CnbNette::register('vat');
CnbNette::getObj()->getWorld();//vrátí jméno státu aktuální měny


//pokud jsis sám definoval měny **Cnb::$defineMoney** v šabloně najdeš jako {$useRate}
?>

Je to na toto připravené :)

Pokud budeš chtít změny v CnbNette tak to už si musíš naprogramovat sám :)

Editoval matata (8. 10. 2010 14:59)

h4kuna
Backer | 740
+
0
-

Ahoj je tu nová verze 2.0 postavená nad sqLite3, php >= 5.3

dotTwelve
Člen | 167
+
0
-

Pozivam jeste nejakou starsi verzi ČNB pluginu a Nette 0.9 a zacalo mi to psat chybu:

Fatal error: Cannot redeclare ExchangeRate::ILS() in /.../document_root/ExchangeRate.php on line 1

Nevite co s tim? Diky

thonzak
Člen | 7
+
0
-

Taky jsem to vypozoroval – zrejme se neco zmenilo v datovem souboru CNB? Poresil jsem to rychlym quick'n'dirty fixem, ktery zabrani duplicitni definici:

<?php
	// Cnb.php radek 654

        $processed = array();		// TH FIX

        foreach($cnb as $value)
        {
            $row    =explode(self::PIPE, $value);

            if( !isset($row[4]) || !is_numeric($row[4]) || ($row[4] = (double)$row[4]) <= 0 )
                continue;
            else
                $row[2] =(double)$row[2];

            if ( isset( $processed[$this->correctTry($row[3])] )) continue;   // TH FIX
            $processed[$this->correctTry($row[3])] = TRUE;                    // TH FIX
?>

(pak je potreba jeste smazat stary cache soubor ExchangeRate.php, aby se vygeneroval novy bez duplicity).

TH

dotTwelve
Člen | 167
+
0
-

Diky diky, uz to zase slape.

h4kuna
Backer | 740
+
0
-

Ahoj, vidím že jste to úspěšně vyřešili. Ano bylo to způsobeno tím že se objevila izraelská měna v lístku 2×. Nýní je to opravené i v balíčku ke stažení.

h4kuna
Backer | 740
+
0
-

Našel jsem par chybeček a odstranil je. Nyní je o trošku rychlejší.

Jedná se o verzi 2