Novinka v Latte: vylepšený filtr |sort
- David Grudl
- Nette Core | 8215
Filtr |sort
seřadí data a zachovává asociaci
s klíčí:
{foreach ($names|sort) as $name}
...
{/foreach}
Jako parametr lze předat vlastní porovnávací funkci:
{var $sorted = ($names|sort: fn($a, $b) => $b <=> $a)}
Tohle funguje v Latte už dlouhé roky. Novinkou je, že filtr podporuje kromě polí i iterátory. Dále je možné říct, aby řadil podle klíčů:
{foreach ($names|sort: byKey: true) as $name}
...
{/foreach}
Nebo pro řazení použít konkrétní sloupec, pokud vypisujeme tabulku:
{foreach ($table|sort: by: 'name') as $row}
{$row->name}
{/foreach}
Zápis by: 'name'
říká, že řadit se bude podle
$row->name
resp. $row['name']
, pokud je
$row
pole. Pokud by nám tohle nestačilo, lze uvést přímo
callback, který hodnotu, podle níž se bude řadit, vrátí:
{foreach ($table|sort: by: fn($row) => $row->category->name) as $row}
{$row->name}
{/foreach}
Totéž platí i pro parametr byKey
, pokud budou v klíčích
pole nebo objekty.
poznámka 1: kombinace dvojtečky za filtrem a dvojtečky za pojmenovaným parametrem může působit trošku nejasně. Z toho důvodu existuje v Latte alternativní způsob zapisů filtrů:
{foreach ($names|sort(byKey: true)) as $name}
{$name}
{/foreach}
poznámka 2: řetězce se porovnávají spaceship <=>
operátorem, tedy čistě podle bajtů. Plánuju přidat podporu pro locale,
které by se pak standardně používalo.