Skip to content

Commit 4eeb29c

Browse files
committed
latte 3.1
1 parent f1acb46 commit 4eeb29c

20 files changed

+754
-79
lines changed

latte/cs/@left-menu.texy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
- [Dědičnost šablon |Template Inheritance]
66
- [Typový systém |type-system]
77
- [Sandbox]
8+
- [HTML attributy |html-attributes]
89

910
- Pro designéry 🎨
1011
- [Syntaxe |syntax]

latte/cs/cookbook/@home.texy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Příklady kódů a receptů pro provádění běžných úkolů pomocí Latte.
88
- [Předávání proměnných napříč šablonami |passing-variables]
99
- [Všechno, co jste kdy chtěli vědět o seskupování |grouping]
1010
- [Jak psát SQL queries v Latte? |how-to-write-sql-queries-in-latte]
11+
- [Migrace z Latte 3.0 |migration-from-latte-30]
1112
- [Migrace z Latte 2 |migration-from-latte2]
1213
- [Migrace z PHP |migration-from-php]
1314
- [Migrace z Twigu |migration-from-twig]
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
Migrace z Latte 3.0
2+
*******************
3+
4+
Latte 3.1 přináší několik vylepšení a změn, díky kterým je psaní šablon bezpečnější a pohodlnější. Většina změn je zpětně kompatibilní, ale některé vyžadují pozornost při přechodu.
5+
6+
Tento průvodce shrnuje BC breaky a jak je řešit.
7+
8+
Latte 3.1 vyžaduje **PHP 8.2** nebo novější.
9+
10+
11+
Chytré atributy a migrace
12+
=========================
13+
14+
Nejvýznamnější změnou v Latte 3.1 je nové chování [chytrých atributů |/html-attributes]. To ovlivňuje, jak se vykreslují hodnoty `null` a logické hodnoty v `data-` atributech.
15+
16+
1. **Hodnoty `null`:** Dříve se `title={$null}` vykresloval jako `title=""`. Nyní se atribut zcela vynechá.
17+
2. **`data-` atributy:** Dříve se `data-foo={=true}` / `data-foo={=false}` vykreslovaly jako `data-foo="1"` / `data-foo=""`. Nyní se vykreslují jako `data-foo="true"` / `data-foo="false"`.
18+
19+
Abychom vám pomohli identifikovat místa, kde se výstup ve vaší aplikaci změnil, Latte poskytuje migrační nástroj.
20+
21+
22+
Migrační varování
23+
-----------------
24+
25+
Můžete zapnout [migrační varování |/develop#Migrační varování], která vás během vykreslování upozorní, pokud se výstup liší od Latte 3.0.
26+
27+
```php
28+
$latte = new Latte\Engine;
29+
$latte->setMigrationWarnings();
30+
```
31+
32+
Pokud jsou povolena, sledujte logy aplikace nebo Tracy bar pro `E_USER_WARNING`. Každé varování bude ukazovat na konkrétní řádek a sloupec v šabloně.
33+
34+
**Jak varování vyřešit:**
35+
36+
Pokud je nové chování správné (např. chcete, aby prázdný atribut zmizel), potvrďte jej použitím filtru `|accept` pro potlačení varování:
37+
38+
```latte
39+
<div class="{$var|accept}"></div>
40+
```
41+
42+
Pokud chcete atribut zachovat jako prázdný (např. `title=""`) místo jeho vynechání, použijte null coalescing operátor:
43+
44+
```latte
45+
<div title={$var ?? ''}></div>
46+
```
47+
48+
Nebo, pokud striktně vyžadujete staré chování (např. `"1"` pro `true`), explicitně přetypujte hodnotu na string:
49+
50+
```latte
51+
<div data-foo={(string) $bool}></div>
52+
```
53+
54+
**Poté, co vyřešíte všechna varování:**
55+
56+
Jakmile vyřešíte všechna varování, vypněte migrační varování a **odstraňte všechny** filtry `|accept` ze svých šablon, protože již nejsou potřeba.
57+
58+
59+
Strict Types
60+
============
61+
62+
Latte 3.1 zapíná `declare(strict_types=1)` ve výchozím nastavení pro všechny kompilované šablony. To zlepšuje typovou bezpečnost, ale může způsobit typové chyby v PHP výrazech uvnitř šablon, pokud jste spoléhali na volné typování.
63+
64+
Pokud typy nemůžete opravit okamžitě, můžete toto chování vypnout:
65+
66+
```php
67+
$latte->setStrictTypes(false);
68+
```
69+
70+
71+
Globální konstanty
72+
==================
73+
74+
Parser šablon byl vylepšen, aby lépe rozlišoval mezi jednoduchými řetězci a konstantami. V důsledku toho musí být globální konstanty nyní prefixovány zpětným lomítkem `\`.
75+
76+
```latte
77+
{* Starý způsob (nyní interpretováno jako řetězec 'PHP_VERSION') *}
78+
{if PHP_VERSION > ...}
79+
80+
{* Nový způsob (správně interpretováno jako konstanta) *}
81+
{if \PHP_VERSION > ...}
82+
```
83+
84+
Tato změna předchází nejednoznačnostem a umožňuje volnější používání neuvodzovkovaných řetězců.
85+
86+
87+
Odstraněné funkce
88+
=================
89+
90+
**Rezervované proměnné:** Proměnné začínající na `$__` (dvou podtržítko) a proměnná `$this` jsou nyní vyhrazeny pro vnitřní použití Latte. Nemůžete je používat v šablonách.
91+
92+
**Undefined-safe operátor:** Operátor `??->`, což byla specifická funkce Latte vytvořená před PHP 8, byl odstraněn. Jde o historický relikt. Používejte prosím standardní PHP nullsafe operátor `?->`.
93+
94+
**Filter Loader**
95+
Metoda `Engine::addFilterLoader()` byla označena jako zastaralá a odstraněna. Šlo o nekonzistentní koncept, který se jinde v Latte nevyskytoval.
96+
97+
**Date Format**
98+
Statická vlastnost `Latte\Runtime\Filters::$dateFormat` byla odstraněna, aby se předešlo globálnímu stavu.
99+
100+
101+
Nové funkce
102+
===========
103+
104+
Během migrace si můžete začít užívat nové funkce:
105+
106+
- **Chytré HTML atributy:** Předávání polí do `class` a `style`, automatické vynechání `null` atributů.
107+
- **Nullsafe filtry:** Použijte `{$var?|filter}` pro přeskočení filtrování null hodnot.
108+
- **`n:elseif`:** Nyní můžete používat `n:elseif` společně s `n:if` a `n:else`.
109+
- **Zjednodušená syntaxe:** Pište `<div n:if={$cond}>` bez uvozovek.
110+
- **Toggle filtr:** Použijte `|toggle` pro ruční ovládání boolean atributů.

latte/cs/custom-filters.texy

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -117,30 +117,6 @@ $latte->addExtension(new App\Latte\MyLatteExtension);
117117
Tento přístup udrží logiku vašeho filtru zapouzdřenou a registraci jednoduchou.
118118

119119

120-
Použití načítače filtrů
121-
-----------------------
122-
123-
Latte umožňuje registrovat načítač filtrů pomocí `addFilterLoader()`. Jde o jediné volatelné callable, které Latte požádá o jakýkoliv neznámý název filtru během kompilace. Načítač vrací PHP callable filtru nebo `null`.
124-
125-
```php
126-
$latte = new Latte\Engine;
127-
128-
// Načítač může dynamicky vytvářet/získávat callable filtry
129-
$latte->addFilterLoader(function (string $name): ?callable {
130-
if ($name === 'myLazyFilter') {
131-
// Představte si zde náročnou inicializaci...
132-
$service = get_some_expensive_service();
133-
return fn($value) => $service->process($value);
134-
}
135-
return null;
136-
});
137-
```
138-
139-
Tato metoda byla primárně určena pro líné načítání filtrů s velmi **náročnou inicializací**. Avšak moderní praktiky vkládání závislostí (dependency injection) obvykle zvládají líné služby efektivněji.
140-
141-
Načítače filtrů přidávají složitost a obecně se nedoporučují ve prospěch přímé registrace pomocí `addFilter()` nebo v rámci rozšíření pomocí `getFilters()`. Používejte načítače pouze pokud máte závažný, specifický důvod související s výkonnostními problémy při inicializaci filtrů, které nelze řešit jinak.
142-
143-
144120
Filtry používající třídu s atributy
145121
-----------------------------------
146122

latte/cs/develop.texy

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ Podporované verze PHP (platí pro poslední setinkové verze Latte):
1515

1616
| verze | kompatibilní s PHP
1717
|-----------------|-------------------
18-
| Latte 3.0 | PHP 8.0 – 8.2
18+
| Latte 3.1 | PHP 8.2 – 8.5
19+
| Latte 3.0 | PHP 8.0 – 8.5
1920

2021

2122
Jak vykreslit šablonu
@@ -193,6 +194,27 @@ $latte = new Latte\Engine;
193194
$latte->setStrictTypes();
194195
```
195196

197+
.[note]
198+
Od verze Latte 3.1 jsou strict types povoleny ve výchozím nastavení. Můžete je deaktivovat pomocí `$latte->setStrictTypes(false)`.
199+
200+
201+
Migrační varování .{data-version:3.1}
202+
=====================================
203+
204+
Latte 3.1 mění chování některých [HTML atributů|html-attributes]. Například hodnoty `null` nyní odstraní atribut namísto vypsání prázdného řetězce. Abyste snadno našli místa, kde tato změna ovlivňuje vaše šablony, můžete zapnout varování o migraci:
205+
206+
```php
207+
$latte->setMigrationWarnings();
208+
```
209+
210+
Pokud je toto zapnuto, Latte kontroluje vykreslované atributy a vyvolá uživatelské varování (`E_USER_WARNING`), pokud se výstup liší od toho, co by Latte 3.0 vygenerovalo. Když narazíte na varování, použijte jedno z těchto řešení:
211+
212+
1. Pokud je nový výstup pro váš případ použití správný (např. preferujete, aby atribut zmizel při `null`), potlačte varování přidáním filtru `|accept`
213+
2. Pokud chcete, aby byl atribut vykreslen jako prázdný (např. `title=""`) namísto odstranění, když je proměnná `null`, poskytněte prázdný řetězec jako zálohu: `title={$val ?? ''}`
214+
3. Pokud striktně vyžadujete staré chování (např. vypsání `"1"` pro `true` namísto `"true"`), explicitně přetypujte hodnotu na řetězec: `data-foo={(string) $val}`
215+
216+
Jakmile jsou všechna varování vyřešena, vypněte varování o migraci odstraněním `setMigrationWarnings()` a **odstraňte všechny** filtry `|accept` ze svých šablon, protože již nejsou potřeba.
217+
196218

197219
Překládání v šablonách .{toc: TranslatorExtension}
198220
==================================================

latte/cs/extending-latte.texy

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,6 @@ $latte->addFilter('truncate', $myTruncate);
4444
// Použití v šabloně: {$text|truncate} nebo {$text|truncate:100}
4545
```
4646

47-
Můžete také zaregistrovat **Filter Loader**, funkci, která dynamicky poskytuje volatelné objekty filtrů podle požadovaného názvu:
48-
49-
```php
50-
$latte->addFilterLoader(fn(string $name) => /* vrátí volatelný objekt nebo null */);
51-
```
52-
53-
5447
Pro registraci funkce použitelné ve výrazech šablony použijte `addFunction()`.
5548

5649
```php

latte/cs/filters.texy

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ V šablonách můžeme používat funkce, které pomáhají upravit nebo přefor
5555
| `floor` | [zaokrouhlí číslo dolů na danou přesnost |#floor]
5656
| `round` | [zaokrouhlí číslo na danou přesnost |#round]
5757

58+
.[table-latte-filters]
59+
|## HTML atributy
60+
| `accept` | [potvrzuje nové chování chytrých atributů |#accept]
61+
| `toggle` | [přepíná přítomnost HTML atributu |#toggle]
62+
5863
.[table-latte-filters]
5964
|## Escapování
6065
| `escapeUrl` | [escapuje parametr v URL |#escapeUrl]
@@ -117,10 +122,31 @@ V šabloně se potom volá takto:
117122
```
118123

119124

125+
Nullsafe filtry .{data-version:3.1}
126+
-----------------------------------
127+
128+
Jakýkoliv filtr lze učinit nullsafe použitím `?|` místo `|`. Pokud je hodnota `null`, filtr se nevykoná a vrátí se `null`. Filtry následující v řetězci jsou také přeskočeny.
129+
130+
To je užitečné v kombinaci s HTML atributy, které jsou vynechány, pokud je hodnota `null`.
131+
132+
```latte
133+
<div title={$title?|upper}>
134+
{* Pokud je $title null: <div> *}
135+
{* Pokud je $title 'hello': <div title="HELLO"> *}
136+
```
137+
138+
120139
Filtry
121140
======
122141

123142

143+
accept .[filter]{data-version:3.1}
144+
----------------------------------
145+
Filtr se používá při [migraci z Latte 3.0|cookbook/migration-from-latte-30] k potvrzení, že jste zkontrolovali změnu chování atributu a akceptujete ji. Nemění hodnotu.
146+
147+
Jde o dočasný nástroj. Jakmile je migrace dokončena a varování při migraci jsou vypnuta, měli byste tento filtr ze svých šablon odstranit.
148+
149+
124150
batch(int $length, mixed $item): array .[filter]
125151
------------------------------------------------
126152
Filtr, který zjednodušuje výpis lineárních dat do podoby tabulky. Vrací pole polí se zadaným počtem položek. Pokud zadáte druhý parametr, použije se k doplnění chybějících položek na posledním řádku.
@@ -827,6 +853,21 @@ Extrahuje část řetězce. Tento filtr byl nahrazen filtrem [#slice].
827853
```
828854

829855

856+
toggle .[filter]{data-version:3.1}
857+
----------------------------------
858+
Filtr `toggle` ovládá přítomnost atributu na základě boolean hodnoty. Pokud je hodnota truthy, atribut je přítomen; pokud je falsy, atribut je zcela vynechán:
859+
860+
```latte
861+
<div uk-grid={$isGrid|toggle}>
862+
{* Pokud je $isGrid truthy: <div uk-grid> *}
863+
{* Pokud je $isGrid falsy: <div> *}
864+
```
865+
866+
Tento filtr je užitečný pro vlastní atributy nebo atributy JavaScriptových knihoven, které vyžadují kontrolu přítomnosti/nepřítomnosti podobně jako HTML boolean atributy.
867+
868+
Filtr lze použít pouze uvnitř HTML atributů.
869+
870+
830871
translate(...$args) .[filter]
831872
-----------------------------
832873
Překládá výrazy do jiných jazyků. Aby byl filtr k dispozici, je potřeba [nastavit překladač |develop#TranslatorExtension]. Můžete také použít [tagy pro překlad |tags#Překlady].

0 commit comments

Comments
 (0)