Úprava Latte makra {bytes}
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- James
- Člen | 54
Ahoj,
mám číselnou hodnotu, reprezentující velikost a potřeboval bych jí v šabloně naformátovat stejným způsobem jako to děla makro {bytes}, ale nikoliv na jednotky B, kB, MB atd. ale na jednotky KiB, MiB, kde není vyšší řád 1000x ale 1024x větší. Jde někde stávající makro {bytes} takto upravit, nebo vytvořit na základě této funkce makro nové.
Díky za radu.
- sKopheK
- Člen | 207
Udělej si vlastní makro, příklad:
namespace XYZ;
use Nette\Latte\MacroNode,
Nette\Latte\PhpWriter;
class CustomMacros extends \Nette\Latte\Macros\MacroSet
{
public static function install(\Nette\Latte\Compiler $compiler)
{
$set = new static($compiler);
$set->addMacro('kibytes', callback($set, 'macroKibytes'), NULL, NULL);
}
public function macroKibytes(MacroNode $node, PhpWriter $writer)
{
$cmd = 'echo (%node.word / 1024) . "KiB"';
return $writer->write($cmd);
}
}
V config.neon:
common:
nette:
latte:
macros:
- XYZ\CustomFormMacros::install
- James
- Člen | 54
Vyřešil jsem to novou funkcí v knihovně Nette\Templating\Helpers.php
public static function kibytes($kibytes, $precision = 2)
{
$kibytes = round($kibytes);
$units = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
foreach ($units as $unit) {
if (abs($kibytes) < 1024 || $unit === end($units)) {
break;
}
$kibytes = $kibytes / 1024;
}
return round($kibytes, $precision) . ' ' . $unit;
}