diff --git a/latte/cs/cookbook/grouping.texy b/latte/cs/cookbook/grouping.texy index 32a799a771..2de4f8c46f 100644 --- a/latte/cs/cookbook/grouping.texy +++ b/latte/cs/cookbook/grouping.texy @@ -8,10 +8,10 @@ Filtr a funkce `|group` umožňují efektivní seskupení dat podle zadaného kr Každá z těchto značek nabízí specifické možnosti pro práci s daty, čímž se stávají nepostradatelnými nástroji pro dynamické a strukturované zobrazení informací v Latte šablonách. -Filtr a funkce `group` ----------------------- +Filtr a funkce `group` .{data-version:3.0.16} +============================================= -Dejme tomu, že máme následující databázovou tabulku, kde jsou položky rozdělené do kategorií: +Představte si databázovou tabulku `items` s položkami rozdělenou do kategorií: | id | categoryId | name |------------------ @@ -22,7 +22,7 @@ Dejme tomu, že máme následující databázovou tabulku, kde jsou položky roz | 5 | 3 | Red | 6 | 3 | Blue -Vykreslit položky ve foreach cyklu jako seznam je samozřejmě snadné: +Jednoduchý seznam všech položek pomocí Latte šablony by vypadal takto: ```latte ``` -Ale co kdybychom chtěli, aby každá kategorie byla v samostatném seznamu? Jinými slovy, řešíme úkol, jak seskupit položky v lineárním seznamu ve foreach cyklu do skupin. Výstup by měl vypadat takto: +Pokud bychom ale chtěli, aby položky byly uspořádány do skupin podle kategorie, potřebujeme je rozdělit tak, že každá kategorie bude mít svůj vlastní seznam. Výsledek by pak měl vypadat následovně: ```latte ``` -Rovnou si ukážeme, jak snadno a elegantně se dá úkol vyřešit pomocí `|group`: +Úkol se dá snadno a elegantně vyřešit pomocí `|group`. Jako parametr uvedeme `categoryId`, což znamená, že se položky rozdělí do menších polí podle hodnoty `$item->categoryId` (pokud by `$item` bylo pole, použije se `$item['categoryId']`): ```latte -{foreach ($items|group: categoryId) as $categoryId => $items} +{foreach ($items|group: categoryId) as $categoryId => $categoryItems} {/foreach} ``` -Vnější `{foreach}` seskupí položky do pro každou kategorii a pak nad nimi iteruje vnitřní `{foreach}`. +Filtr lze v Latte použít i jako funkci, což nám dává alternativní syntaxi: `{foreach group($items, categoryId) ...}`. +Chcete-li seskupovat položky podle složitějších kritérií, můžete v parametru filtru použít funkci. Například, seskupení položek podle délky názvu by vypadalo takto: ```latte -{foreach $items as $item} - +{foreach ($items|group: fn($item) => strlen($item->name)) as $items} + ... {/foreach} ``` -Výsledek bude vypadat takto: +Je důležité si uvědomit, že `$categoryItems` není běžné pole, ale objekt, který se chová jako iterátor. Pro přístup k první položce skupiny můžete použít funkci [`first()`|latte:functions#first]. -```latte - -``` +Tato flexibilita v seskupování dat činí `group` výjimečně užitečným nástrojem pro prezentaci dat v šablonách Latte. +Vnořené smyčky +-------------- + +Představme si, že máme databázovou tabulku s dalším sloupcem `subcategoryId`, který definuje podkategorie jednotlivých položek. Chceme zobrazit každou hlavní kategorii v samostatném seznamu `