ČNB – česká národní banka
- h4kuna
- Backer | 740
ČNB
- verze: 2.0 Repozitář
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
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
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)
- h4kuna
- Backer | 740
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.
- h4kuna
- Backer | 740
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
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)
- dotTwelve
- Člen | 167
Tady https://componette.org/search/?… mi to vypisuje odkazy na stazeni cnb.zip ve formatu: https://files.nette.org/162/cnb.zip
- dotTwelve
- Člen | 167
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
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
- despiq
- Člen | 320
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
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
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 :)
- „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?
- 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?
- 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
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
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?
- 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>
- 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
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.
- thonzak
- Člen | 7
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
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)
- thonzak
- Člen | 7
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