diff --git a/latte/cs/cookbook/grouping.texy b/latte/cs/cookbook/grouping.texy
index 32a799a771..f31c4b2167 100644
--- a/latte/cs/cookbook/grouping.texy
+++ b/latte/cs/cookbook/grouping.texy
@@ -9,7 +9,7 @@ Každá z těchto značek nabízí specifické možnosti pro práci s daty, čí
Filtr a funkce `group`
-----------------------
+======================
Dejme tomu, že máme následující databázovou tabulku, kde jsou položky rozdělené do kategorií:
@@ -63,43 +63,9 @@ Rovnou si ukážeme, jak snadno a elegantně se dá úkol vyřešit pomocí `|gr
{/foreach}
```
-Vnější `{foreach}` seskupí položky do pro každou kategorii a pak nad nimi iteruje vnitřní `{foreach}`.
+Filtr `|group` položky seskupí do menších polí podle kategorie. Protože je dostupný i jako funkce, šlo by použít i `{foreach group($items, categoryId) ...}`.
-
-```latte
-{foreach $items as $item}
-
- {iterateWhile}
- - {$item->name}
- {/iterateWhile true}
-
-{/foreach}
-```
-
-Výsledek bude vypadat takto:
-
-```latte
-
- - Apple
- - Banana
- - PHP
- - Green
- - Red
- - Blue
-
-```
-
-
-```latte
-{foreach ($items|group: categoryId) as $categoryId => $items}
- {($items|first)->name}
-
- {foreach $items as $item}
- - {$item->name}
- {/foreach}
-
-{/foreach}
-```
+V proměnné `$items` není přímo pole, ale objekt iterátoru. Pro získání první položky použijte funkci [`first()`|latte:functions|#first].
Vnořené smyčky
@@ -110,11 +76,11 @@ V rámci jednoho cyklu můžeme vytvářet více vnitřních smyček a dokonce j
Dejme tomu, že v tabulce bude ještě další sloupec `subcategoryId` a kromě toho, že každá kategorie bude v samostatném ``, každá každý podkategorie samostatném ``:
```latte
-{foreach ($items|group: categoryId) as $items1}
+{foreach ($items|group: categoryId) as $categoryItems}
- {foreach ($items1|group: subcategoryId) as $items2}
+ {foreach ($categoryItems|group: subcategoryId) as $subcategoryItems}
- {foreach $items2 as $item}
+ {foreach $subcategoryItems as $item}
- {$item->name}
{/foreach}
@@ -124,36 +90,63 @@ Dejme tomu, že v tabulce bude ještě další sloupec `subcategoryId` a kromě
```
-Filtr |batch
-------------
+Spojení s Nette Database
+------------------------
-Seskupování lineárních položek obstarává také filtr `batch`, a to do dávek s pevným počtem prvků:
+Pojďme si ukázat, jak efektivně využít seskupování dat v kombinaci s Nette Database. Předpokládejme, že pracujeme s tabulkou `things`, která obsahuje informace jako v našem úvodním příkladu, a je spojená s tabulkou `categories` prostřednictvím sloupce `categoryId`:
+
+| categoryId | name |
+|------------|------------|
+| 1 | Fruits |
+| 2 | Languages |
+| 3 | Colors |
+
+Data z tabulky `things` načteme pomocí Nette Database Explorer příkazem `$things = $db->table('things')`. Během iterace nad těmito daty máme možnost přistupovat nejen k atributům jako `$item->name` a `$item->categoryId`, ale díky propojení s tabulkou `categories` také k souvisejícímu řádku v ní přes `$item->category`. Na tomto propojení lze demonstrovat praktické využití seskupení:
```latte
-
-{foreach ($items|batch:3) as $batch}
- {foreach $batch as $item}
- - {$item->name}
- {/foreach}
+{foreach $things|group: 'category' as $category => $items}
+ {$category->name}
+
+ {foreach $items as $item}
+ - {$item->name}
+ {/foreach}
+
{/foreach}
-
```
-Lze jej nahradit za iterateWhile tímto způsobem:
+V tomto případě používáme filtr `|group` na propojený řádek `$item->category`, nikoliv jen na jednoduchý sloupec `categoryId`. Díky tomu v proměnné `$category` nepracujeme s číselným identifikátorem, ale přímo s `ActiveRow` kategorie, což nám umožňuje přímo vypisovat její název pomocí `{$category->name}`. Toto je praktický příklad, jak může seskupování zpřehlednit šablony a usnadnit práci s daty.
+
+
+Filtr `|batch`
+==============
+
+Filtr umožňuje rozdělit seznam prvků do skupin s předem určeným počtem prvků. Tento filtr je ideální pro situace, kdy chcete data prezentovat ve více menších skupinách, například pro lepší přehlednost nebo vizuální uspořádání na stránce.
+
+Představme si, že máme seznam položek a chceme je zobrazit v seznamech, kde každý obsahuje maximálně tři položky. Použití filtru `|batch` je v takovém případě velmi praktické:
```latte
-{foreach $items as $item}
- {iterateWhile}
- - {$item->name}
- {/iterateWhile $iterator->counter0 % 3}
+{foreach ($items|batch: 3) as $batch}
+ {foreach $batch as $item}
+ - {$item->name}
+ {/foreach}
{/foreach}
```
+V tomto příkladu je seznam `$items` rozdělen do menších skupin, přičemž každá skupina (`$batch`) obsahuje až tři položky. Každá skupina je poté zobrazena v samostatném `` seznamu.
+
+Pokud poslední skupina neobsahuje dostatek prvků k dosažení požadovaného počtu, druhý parametr filtru umožňuje definovat, čím bude tato skupina doplněna. To je ideální pro estetické zarovnání prvků, zejména na webových stránkách, kde by neúplná řada mohla působit neuspořádaně.
+
+```latte
+{foreach ($items|batch: 3, '—') as $batch}
+ ...
+
+```
+
Značka `{iterateWhile}`
------------------------
+=======================
Stejné úkoly, jako jsme řešili s filtrem `|group`, si ukážeme s použitím značky `{iterateWhile}`. Hlavní rozdíl mezi oběma přístupy je v tom, že `group` nejprve zpracuje a seskupí všechny vstupní data, zatímco `{iterateWhile}` řídí průběhu cyklů s podmínkami, takže iterace probíhá postupně.