uprava Nette\Templates\TemplateHelpers::bytes()
- Lopo
- Člen | 277
kedze som riesil nejake veci ohladom skracovania velkosti v bytoch, narazil som na problem 1k pocitaneho ako 1000 vs 1024 a s tym suvisiace prefixy jednotiek ‚k‘ vs ‚Ki‘
vznikla z toho nasledovna uprava helpera bytes() ktoru davam k dispozicii a myslim ze by nebolo odveci aby sa dostala do Nette
/**
* Converts to human readable file size.
* @param int value
* @param int number of decimal digits
* @param int value of 1k
* @param bool use ISO/IEC unit names
* @see http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=31898
* @return string formated value
*/
public static function bytes($bytes, $precision=2, $k=1024, $iec=FALSE)
{
$bytes=round($bytes);
if ($iec && $k==1024) // only if ISO/IEC forced
$units=array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB');
elseif ($k==1000 || $k==1024) // 1024 breaks ISO/IEC
$units=array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
else // invalid $k value
return $bytes;
foreach ($units as $unit) {
if (abs($bytes)<$k || $unit===end($units))
break;
$bytes=$bytes/$k;
}
return round($bytes, $precision)." $unit";
}
rozsirenie je riesene pomocou dalsich 2 parametrov metody:
- 3ti urcuje aka je velkost 1k
- 4ty urcuje ci sa maju pouzit IEC nazvy jednotiek
defaultne ostava funkcnost ako povodna verzia (aj ked je to proti ISO/IEC norme, ale asi vacsine ‚geekov‘ prirodzenejsie), pre dosiahnutie IEC nazvov je potrebne aby 1k nebolo 1000 a povolilo sa pouzitie IEC
pre presne chovanie podla ISO/IEC treba upravit podmienky na if($k=1024)elseif($k=1000)else
v pripade zadania 1k ineho nez 1000 a 1024 vrati len povodnu hodnotu
k tomu vsetkemu som doplnil dalsie 3 velkosti: Exa, Zetta, Yotta ktore su v norme obsiahnute a mali by na chvilu asi vystacit :)
- David Grudl
- Nette Core | 8218
Myslím, že není potřeba bytes() komplikovat dalšími parametry. Pokud
budu chtít jednotky uvádět dle ISO/IEC, tak si helper bytes
nastavím na vlastní funkci.
- Lopo
- Člen | 277
nemyslim ze je to komplikovanie …
tie dalsie 2 parametre nejsu povinne, v pripade prepisu halpera budu aj nadalej vsade rovnake vysledky, len to umozni v pripade potreby dodatocne veci
nerad prepisujem v app veci ktore su priamo v Nette, ale v tomto pripade nemam moc na vyber kedze ten helper v Nette nedodrzuje a ani neumoznuje dodrzovat normu – preto som prave vytvoril tuto verziu ktora to umoznuje vynutit ale v zaklade aj nadalej umoznuje aktualne pouzivanie
- David Grudl
- Nette Core | 8218
Tohle téma se tu řešilo už vícekrát, takže ve stručnosti: potřeba uvádět jednotky dle ISO/IEC normy je minoritní, uživatelům je to fuk, nakonec Průzkumník ve Windows taky uvádí jednotky nenormativně. Třída Template je navržena právě tak jak je, aby se funkčnost dala měnit, je to tedy čisté.
Jsem rád, že jsi tu uvedl kód vylepšené funkce, ale spíš bych jej přesunul do tipů a triků.