Novinka v Latte: vylepšený filtr |sort

David Grudl
Nette Core | 8228
+
+7
-

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.