diff --git a/latte/cs/cookbook/grouping.texy b/latte/cs/cookbook/grouping.texy index 3b2d6bf60a..32a799a771 100644 --- a/latte/cs/cookbook/grouping.texy +++ b/latte/cs/cookbook/grouping.texy @@ -2,7 +2,14 @@ Všechno, co jste kdy chtěli vědět o seskupování *********************************************** .[perex] -Značka `{iterateWhile}` se hodí na nejrůznější kejkle ve foreach cyklech. +Při práci s daty ve šablonách můžete často narazit na potřebu jejich seskupování nebo specifického zobrazení podle určitých kritérií. Latte pro tento účel nabízí hned několik silných nástrojů. + +Filtr a funkce `|group` umožňují efektivní seskupení dat podle zadaného kritéria, filtr `|batch` zase usnadňuje rozdělení dat do pevně daných dávek a značka `{iterateWhile}` poskytuje možnost složitějšího řízení průběhu cyklů s podmínkami. +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` +---------------------- Dejme tomu, že máme následující databázovou tabulku, kde jsou položky rozdělené do kategorií: @@ -44,22 +51,20 @@ Ale co kdybychom chtěli, aby každá kategorie byla v samostatném seznamu? Jin ``` -Rovnou si ukážeme, jak snadno a elegantně se dá úkol vyřešit pomocí iterateWhile: +Rovnou si ukážeme, jak snadno a elegantně se dá úkol vyřešit pomocí `|group`: ```latte -{foreach $items as $item} +{foreach ($items|group: categoryId) as $categoryId => $items} {/foreach} ``` -Zatímco `{foreach}` označuje vnější část cyklu, tedy vykreslování seznamů pro každou kategorii, tak značka `{iterateWhile}` označuje vnitřní část, tedy jednotlivé položky. -Podmínka v koncové značce říká, že opakování bude probíhat do té doby, dokud aktuální i následující prvek patří do stejné kategorie (`$iterator->nextValue` je [následující položka|/tags#$iterator]). +Vnější `{foreach}` seskupí položky do pro každou kategorii a pak nad nimi iteruje vnitřní `{foreach}`. -Kdyby podmínka byla splněná vždy, tak se ve vnitřním cyklu vykreslí všechny prvky: ```latte {foreach $items as $item} @@ -84,47 +89,115 @@ Výsledek bude vypadat takto: ``` -K čemu je takové použití iterateWhile dobré? Jak se liší od řešení, které jsme si ukázali úplně na začátku tohoto návodu? Rozdíl je v tom, že když bude tabulka prázdná a nebude obsahovat žádné prvky, nevypíše se prázdné ``. +```latte +{foreach ($items|group: categoryId) as $categoryId => $items} +

{($items|first)->name}

+ +{/foreach} +``` -Řešení bez `{iterateWhile}` ---------------------------- -Pokud bychom stejný úkol řešili zcela základními prostředky šablonovacích systému, například v Twig, Blade, nebo čistém PHP, vypadalo by řešení cca takto: +Vnořené smyčky +-------------- + +V rámci jednoho cyklu můžeme vytvářet více vnitřních smyček a dokonce je zanořovat. Takto by se daly seskupovat třeba podkategorie atd. + +Dejme tomu, že v tabulce bude ještě další sloupec `subcategoryId` a kromě toho, že každá kategorie bude v samostatném `