From 4116b687137330e7537ad1439ea6f218152a6b18 Mon Sep 17 00:00:00 2001 From: David Grudl Date: Tue, 14 May 2024 11:55:55 +0200 Subject: [PATCH] latte 3.0.16 --- latte/cs/filters.texy | 58 +++++++++++++++++++++++++++++++++++++---- latte/cs/functions.texy | 24 +++++++++++++++-- latte/cs/tags.texy | 4 ++- 3 files changed, 78 insertions(+), 8 deletions(-) diff --git a/latte/cs/filters.texy b/latte/cs/filters.texy index 55382c19ef..c5b679d2a4 100644 --- a/latte/cs/filters.texy +++ b/latte/cs/filters.texy @@ -14,6 +14,7 @@ V šablonách můžeme používat funkce, které pomáhají upravit nebo přefor | `date` | [formátuje datum |#date] | `explode` | [rozdělí řetězec na pole podle oddělovače |#explode] | `first` | [vrací první prvek pole nebo znak řetězce |#first] +| `group` | [seskupí data podle specifického klíče |#group] | `implode` | [spojí pole do řetězce |#implode] | `indent` | [odsadí text zleva o daný počet tabulátorů |#indent] | `join` | [spojí pole do řetězce |#implode] @@ -152,6 +153,8 @@ Vypíše: ``` +Viz také [#group], [tags#iterateWhile]. + breakLines .[filter] -------------------- @@ -330,6 +333,25 @@ Převede první písmeno na velká. Vyžaduje PHP rozšíření `mbstring`. Viz také [#capitalize], [#lower], [#upper]. +group(string|int|\Closure by): array .[filter]{data-version:3.0.16} +------------------------------------------------------------------- +Filtr seskupí data podle různých kritérií. + +V tomto příkladu se řádky v tabulce seskupují podle sloupce `categoryId`. Výstupem je pole polí, kde klíčem je hodnota ve sloupci `categoryId`. [Přečtěte si podrobný návod|cookbook/grouping]. + +```latte +{foreach ($table|group: 'categoryId') as $categoryId => $items} + +{/foreach} +``` + +Viz také [#batch], funkce [group|functions#group] a značka [iterateWhile|tags#iterateWhile]. + + implode(string glue = '') .[filter] ----------------------------------- Vrátí řetězec, který je zřetězením položek sekvence. Alias pro `join`. @@ -591,9 +613,9 @@ Pokud je zadaný parametr length a je kladný, posloupnost bude obsahovat tolik Ve výchozím nastavení filtr změní pořadí a resetuje celočíselného klíče pole. Toto chování lze změnit nastavením preserveKeys na true. Řetězcové klíče jsou vždy zachovány, bez ohledu na tento parametr. -sort .[filter] --------------- -Filtr, který seřadí pole. Zachovává asociaci s klíčí. +sort(?Closure comparison, string|int|\Closure|null by=null, string|int|\Closure|bool byKey=false) .[filter] +----------------------------------------------------------------------------------------------------------- +Filtr slouží k seřazení prvků v poli nebo iterátoru, přičemž zachovává asociační klíče: ```latte {foreach ($names|sort) as $name} @@ -609,12 +631,38 @@ Filtr, který seřadí pole. Zachovává asociaci s klíčí. {/foreach} ``` -Jako parametr lze předat vlastní porovnávací funkci: +Můžete specifikovat vlastní porovnávací funkci pro řazení (příklad ukazuje, jak obrátit řazení od největší po nejmenší): ```latte -{var $sorted = ($names|sort: fn($a, $b) => $b <=> $a)} +{var $reverted = ($names|sort: fn($a, $b) => $b <=> $a)} ``` +Filtr `|sort` také umožňuje řadit prvky podle klíčů: + +```latte +{foreach ($names|sort: byKey: true) as $name} + ... +{/foreach} +``` + +Pokud potřebujete seřadit tabulku podle konkrétního sloupce, můžete použít parametr `by`. Hodnota `'name'` v ukázce určuje, že se bude řadit podle `$row->name` nebo `$row['name']` (v závislosti na tom, zda je `$row` pole nebo objekt): + +```latte +{foreach ($table|sort: by: 'name') as $row} + {$row->name} +{/foreach} +``` + +Můžete také definovat callback funkci, která určí hodnotu, podle které se má seřadit: + +```latte +{foreach ($table|sort: by: fn($row) => $row->category->name) as $row} + {$row->name} +{/foreach} +``` + +Stejným způsobem lze využít i parametr `byKey`. + spaceless .[filter] ------------------- diff --git a/latte/cs/functions.texy b/latte/cs/functions.texy index b7f9854aa5..89b7135604 100644 --- a/latte/cs/functions.texy +++ b/latte/cs/functions.texy @@ -9,6 +9,7 @@ V šablonách můžeme kromě běžných PHP funkcí používat i tyto další. | `divisibleBy`| [zkontroluje, zda je proměnná dělitelná číslem |#divisibleBy] | `even` | [zkontroluje, zda je dané číslo sudé |#even] | `first` | [vrací první prvek pole nebo znak řetězce |#first] +| `group` | [seskupí data podle specifického klíče |#group] | `hasBlock` | [zjistí existenci bloku |#hasBlock] | `last` | [vrací poslední prvek pole nebo znak řetězce |#last] | `odd` | [zkontroluje, zda je dané číslo liché |#odd] @@ -74,8 +75,8 @@ Zkontroluje, zda je dané číslo sudé. ``` -first(string|array $value): mixed .[method] -------------------------------------------- +first(string|iterable $value): mixed .[method] +---------------------------------------------- Vrací první prvek pole nebo znak řetězce: ```latte @@ -86,6 +87,25 @@ Vrací první prvek pole nebo znak řetězce: Viz také [#last], [filtr first|filters#first]. +group(iterable $data, string|int|\Closure $by): array .[method]{data-version:3.0.16} +------------------------------------------------------------------------------------ +Funkce seskupí data podle různých kritérií. + +V tomto příkladu se řádky v tabulce seskupují podle sloupce `categoryId`. Výstupem je pole polí, kde klíčem je hodnota ve sloupci `categoryId`. [Přečtěte si podrobný návod|cookbook/grouping]. + +```latte +{foreach group($table, 'categoryId') as $categoryId => $items} + +{/foreach} +``` + +Viz také filtr [group|filters#group]. + + hasBlock(string $name): bool .[method]{data-version:3.0.10} ----------------------------------------------------------- Zjistí, zda blok uvedeného jména existuje: diff --git a/latte/cs/tags.texy b/latte/cs/tags.texy index 8f90f0553a..3a01955a74 100644 --- a/latte/cs/tags.texy +++ b/latte/cs/tags.texy @@ -482,7 +482,7 @@ To je docela praktické, že? `{iterateWhile}` ---------------- -Zjednodušuje seskupování lineárních dat během iterování v cyklu foreach tím, že iteraci provádí ve vnořené smyčce, dokud je splněná podmínka. [Přečtěte si návod|cookbook/iteratewhile]. +Zjednodušuje seskupování lineárních dat během iterování v cyklu foreach tím, že iteraci provádí ve vnořené smyčce, dokud je splněná podmínka. [Přečtěte si podrobný návod|cookbook/grouping]. Může také elegantně nahradit `{first}` a `{last}` v příkladu výše: @@ -501,6 +501,8 @@ Může také elegantně nahradit `{first}` a `{last}` v příkladu výše: {/foreach} ``` +Viz také [filters#batch], [filters#group]. + `{for}` -------