Skip to content

Commit 2a1f34d

Browse files
committed
latte improved WIP
1 parent 0fc31ad commit 2a1f34d

15 files changed

+729
-609
lines changed

best-practices/cs/lets-create-contact-form.texy

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ Zatím se odesílá prostý textový email obsahující pouze zprávu odeslanou
131131
</html>
132132
```
133133

134-
Zbývá upravit `ContactFacade`, aby tuto šablonu používal. V konstruktoru si vyžádáme třídu `LatteFactory`, která umí vyrobit objekt `Latte\Engine`, tedy [vykreslovač Latte šablon |latte:develop#jak-vykreslit-sablonu]. Pomocí metody `renderToString()` šablonu vykreslíme do souboru, prvním parametrem je cesta k šabloně a druhým jsou proměnné.
134+
Zbývá upravit `ContactFacade`, aby tuto šablonu používal. V konstruktoru si vyžádáme třídu `LatteFactory`, která umí vyrobit objekt `Latte\Engine`, tedy [vykreslovač Latte šablon |latte:develop#vykresleni-sablony]. Pomocí metody `renderToString()` šablonu vykreslíme do souboru, prvním parametrem je cesta k šabloně a druhým jsou proměnné.
135135

136136
```php
137137
namespace App\Model;

latte/cs/cookbook/how-to-write-sql-queries-in-latte.texy

+26-6
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ Jak psát SQL queries v Latte?
22
*****************************
33

44
.[perex]
5-
Latte se může hodit i pro generování opravdu složitých SQL dotazů.
5+
Latte může být užitečným nástrojem i pro generování komplexních SQL dotazů, což zvyšuje jejich čitelnost a udržovatelnost.
66

7-
Pokud vytvoření SQL dotazu obsahuje řadu podmínek a proměnných, může být opravdu přehlednější ho napsat v Latte. Velmi jednoduchý příklad:
7+
Když SQL dotaz obsahuje mnoho podmínek a proměnných, může být jeho zápis v Latte přehlednější a flexibilnější. Zde je jednoduchý příklad demonstrující tuto výhodu:
88

99
```latte
1010
SELECT users.* FROM users
@@ -14,8 +14,13 @@ SELECT users.* FROM users
1414
WHERE groups.name = 'Admins' {ifset $country} AND country.name = {$country} {/ifset}
1515
```
1616

17-
Pomocí `$latte->setContentType()` řekneme Latte, aby k obsahu přistupovalo jako k prostému textu (nikoliv jako k HTML) a dále
18-
připravíme escapovací funkci, která bude řetězce escapovat přímo databázovým driverem:
17+
Pro správné fungování je třeba provést několik kroků:
18+
19+
1. Nastavení typu obsahu: pomocí `$latte->setContentType()` informujeme Latte, že obsah má být zpracován jako prostý text, nikoliv jako HTML.
20+
21+
2. Definice escapovací funkce: vytvoříme vlastní escapovací funkci, která bude řetězce escapovat přímo pomocí databázového driveru. Tím zajistíme bezpečnost proti SQL injection.
22+
23+
Zde je ukázka implementace těchto kroků:
1924

2025
```php
2126
$db = new PDO(/* ... */);
@@ -31,13 +36,28 @@ $latte->addFilter('escape', fn($val) => match (true) {
3136
});
3237
```
3338

34-
Použití by vypadalo takto:
39+
Tato escapovací funkce zajišťuje správné ošetření různých datových typů:
40+
- Řetězce jsou escapovány pomocí metody `quote()` databázového driveru.
41+
- Čísla (celá i s plovoucí desetinnou čárkou) jsou převedena na řetězce.
42+
- Booleovské hodnoty jsou převedeny na '1' nebo '0'.
43+
- Null hodnoty jsou převedeny na 'NULL'.
44+
- Pro nepodporované typy je vyhozena výjimka.
45+
46+
Použití v praxi by pak vypadalo takto:
3547

3648
```php
3749
$sql = $latte->renderToString('query.sql.latte', ['country' => $country]);
3850
$result = $db->query($sql);
3951
```
4052

41-
*Uvedený příklad vyžaduje Latte v3.0.5 nebo vyšší.*
53+
Tento přístup umožňuje:
54+
1. Dynamické sestavování SQL dotazů s využitím logiky Latte.
55+
2. Bezpečné vkládání proměnných do dotazu díky vlastní escapovací funkci.
56+
3. Lepší čitelnost a udržovatelnost komplexních SQL dotazů.
57+
58+
.[note]
59+
Tento příklad vyžaduje Latte ve verzi 3.0.5 nebo novější.
60+
61+
Využití Latte pro generování SQL dotazů může výrazně zjednodušit práci s komplexními dotazy, zejména v situacích, kdy se dotaz dynamicky mění na základě různých podmínek. Zároveň tento přístup pomáhá udržet kód čistý a snadno upravitelný.
4262

4363
{{leftbar: /@left-menu}}

latte/cs/cookbook/migration-from-php.texy

+20-8
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,30 @@ Migrace z PHP do Latte
22
**********************
33

44
.[perex]
5-
Převádíte starý projekt napsaný v čistém PHP do Latte? Máme pro vás nástroj, které vám migraci usnadní. [Vyzkoušejte jej online |https://php2latte.nette.org].
5+
Převádíte starší projekt napsaný v čistém PHP na Latte? Máme pro vás nástroj, který tento proces výrazně zjednoduší. [Vyzkoušejte jej online |https://php2latte.nette.org].
66

7-
Nástroj si můžete stáhnout z [GitHubu|https://github.com/nette/latte-tools] nebo nainstalovat pomocí Composeru:
7+
Tento užitečný nástroj můžete získat dvěma způsoby:
8+
9+
1. Stáhnout z [GitHubu|https://github.com/nette/latte-tools]
10+
2. Nainstalovat pomocí Composeru:
811

912
```shell
1013
composer create-project latte/tools
1114
```
1215

13-
Převodník nepoužívá jednoduché záměny pomocí regulárních výrazů, naopak využívá přímo PHP parser, takže si poradí s jakkoliv složitou syntaxí.
16+
Na rozdíl od jednoduchých nástrojů využívajících regulární výrazy, tento převodník používá sofistikovaný PHP parser. Díky tomu si poradí i s komplexní PHP syntaxí.
1417

15-
K převodu z PHP do Latte slouží skript `php-to-latte.php`:
18+
Pro převod z PHP do Latte použijte skript `php-to-latte.php`:
1619

1720
```shell
1821
php-to-latte.php input.php [output.latte]
1922
```
2023

2124

22-
Příklad
23-
-------
25+
Příklad použití
26+
---------------
2427

25-
Vstupní soubor může vypadat třeba takto (jde o část kódu fóra PunBB):
28+
Podívejme se na konkrétní příklad. Níže je ukázka vstupního PHP souboru (část kódu fóra PunBB):
2629

2730
```php
2831
<h1><span><?= $lang_common['User list'] ?></span></h1>
@@ -48,7 +51,7 @@ foreach ($result as $cur_group) {
4851
</div>
4952
```
5053

51-
Vygeneruje tuto šablonu:
54+
Po zpracování nástrojem získáme následující Latte šablonu:
5255

5356
```latte
5457
<h1><span>{$lang_common['User list']}</span></h1>
@@ -69,4 +72,13 @@ Vygeneruje tuto šablonu:
6972
</div>
7073
```
7174

75+
Hlavní výhody tohoto převodu:
76+
77+
1. **Čistší syntaxe**: Latte šablona je čitelnější a snáze udržovatelná.
78+
2. **Automatické escapování**: Latte automaticky escapuje výstup, čímž zvyšuje bezpečnost (např. `htmlspecialchars()` již není potřeba).
79+
3. **Lepší struktura**: Latte tagy (`{foreach}`, `{if}`) jasně oddělují logiku od prezentace.
80+
4. **Zjednodušení**: Odstraňuje nutnost explicitního výpisu pomocí `echo`.
81+
82+
Tento nástroj významně urychluje a zjednodušuje proces migrace z PHP na Latte, což vám umožní rychleji modernizovat vaše projekty a využít všech výhod, které Latte nabízí.
83+
7284
{{leftbar: /@left-menu}}

latte/cs/cookbook/migration-from-twig.texy

+27-13
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,40 @@ Migrace z Twigu do Latte
22
************************
33

44
.[perex]
5-
Převádíte projekt napsaný v Twigu do modernějšího Latte? Máme pro vás nástroj, které vám migraci usnadní. [Vyzkoušejte jej online |https://twig2latte.nette.org].
5+
Převádíte projekt z Twigu na modernější a mnohem bezpečnější Latte? Máme pro vás nástroj, který tento proces výrazně zjednoduší. [Vyzkoušejte jej online |https://twig2latte.nette.org].
66

7-
Nástroj si můžete stáhnout z [GitHubu|https://github.com/nette/latte-tools] nebo nainstalovat pomocí Composeru:
7+
Tento užitečný nástroj je dostupný dvěma způsoby:
8+
9+
1. Stažením z [GitHubu|https://github.com/nette/latte-tools]
10+
2. Instalací pomocí Composeru:
811

912
```shell
1013
composer create-project latte/tools
1114
```
1215

13-
Převodník nepoužívá jednoduché záměny pomocí regulárních výrazů, naopak využívá přímo Twig parser, takže si poradí s jakkoliv složitou syntaxí.
16+
Na rozdíl od jednoduchých nástrojů využívajících regulární výrazy, tento převodník používá sofistikovaný Twig parser. Díky tomu si poradí i s komplexní Twig syntaxí.
1417

15-
K převodu z Twigu do Latte slouží skript `twig-to-latte.php`:
18+
Pro převod z Twigu do Latte použijte skript `twig-to-latte.php`:
1619

1720
```shell
1821
twig-to-latte.php input.twig.html [output.latte]
1922
```
2023

2124

22-
Konverze
23-
--------
25+
Konverze a její specifika
26+
-------------------------
2427

25-
Převod předpokládá ruční úpravu výsledku, protože konverzi nelze provést jednoznačně. Twig používá tečkovou syntax, kde `{{ a.b }}` může znamenat `$a->b`, `$a['b']` nebo `$a->getB()`, což nelze rozlišit při kompilaci. Převaděč proto vše převádí na `$a->b`.
28+
Je důležité poznamenat, že převod může vyžadovat ruční úpravy výsledku. Důvodem je, že některé konstrukce v Twigu nelze jednoznačně převést do Latte. Například, Twig používá tečkovou syntax, kde `{{ a.b }}` může znamenat `$a->b`, `$a['b']` nebo `$a->getB()`. Tento rozdíl nelze rozlišit při kompilaci, proto převaděč vše převádí na `$a->b`.
2629

27-
Některé funkce, filtry nebo tagy nemají obdobu v Latte, nebo se mohou chovat mírně jinak.
30+
Některé funkce, filtry nebo tagy v Twigu nemají přímou obdobu v Latte, nebo se mohou chovat mírně odlišně. To je další důvod, proč může být potřeba ruční úprava po automatickém převodu.
2831

2932

30-
Příklad
31-
-------
33+
Příklad použití
34+
---------------
3235

33-
Vstupní soubor může vypadat třeba takto:
36+
Podívejme se na konkrétní příklad. Níže je ukázka vstupního Twig souboru:
3437

35-
```latte
38+
```twig
3639
{% use "blocks.twig" %}
3740
<!DOCTYPE html>
3841
<html>
@@ -54,7 +57,7 @@ Vstupní soubor může vypadat třeba takto:
5457
</html>
5558
```
5659

57-
Po konverzi do Latte získáme tuto šablonu:
60+
Po konverzi do Latte získáme následující šablonu:
5861

5962
```latte
6063
{import 'blocks.latte'}
@@ -78,4 +81,15 @@ Po konverzi do Latte získáme tuto šablonu:
7881
</html>
7982
```
8083

84+
Hlavní rozdíly a výhody po převodu:
85+
86+
1. **Změna syntaxe**: Twig používá `{% ... %}` pro logiku a `{{ ... }}` pro výpis, zatímco Latte používá jednotnou `{ ... }` syntaxi
87+
2. **Bloky**: `{% block ... %}` se mění na `{block ...}`
88+
3. **Cykly**: `{% for ... %}` se převádí na `{foreach ...}`
89+
4. **Podmínky**: `{% if ... %}` zůstává podobné, ale používá se `{if ...}`.
90+
5. **Přístup k proměnným**: Tečková notace `item.caption` se mění na objektovou notaci `$item->caption`
91+
6. **Import**: `{% use ... %}` se mění na `{import ...}`
92+
93+
Tento nástroj významně urychluje a zjednodušuje proces migrace z Twigu na Latte. Umožňuje vám rychle modernizovat vaše projekty a využít všech výhod, které Latte nabízí, včetně jeho výkonu a flexibilnity. Nezapomeňte však po automatickém převodu zkontrolovat a případně upravit výsledný kód, aby plně odpovídal vašim potřebám a specifikům vašeho projektu.
94+
8195
{{leftbar: /@left-menu}}

latte/cs/cookbook/passing-variables.texy

+15-13
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
Předávání proměnných napříč šablonami
22
*************************************
33

4-
Tento průvodce vám vysvětlí, jak se proměnné předávají mezi šablonami v Latte pomocí různých tagů jako `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` a dalších. Dozvíte se také, jak pracovat s proměnnými v tagu `{block}` a `{define}`, a k čemu slouží značka `{parameters}`.
4+
Tento průvodce objasňuje, jak se v Latte předávají proměnné mezi šablonami pomocí různých tagů jako `{include}`, `{import}`, `{embed}`, `{layout}`, `{sandbox}` a dalších. Dozvíte se také, jak pracovat s proměnnými v tagu `{block}` a `{define}`, a k čemu slouží značka `{parameters}`.
55

66

77
Typy proměnných
88
---------------
9-
Proměnné v Latte můžeme rozdělit do tří kategorií podle toho, jak a kde jsou definovány:
9+
V Latte rozlišujeme tři kategorie proměnných podle jejich definice a dostupnosti:
1010

11-
**Vstupní proměnné** jsou ty, které jsou do šablony předávány zvenčí, například z PHP skriptu nebo pomocí tagu jako `{include}`.
11+
**Vstupní proměnné** jsou předávány do šablony zvenčí, typicky z PHP skriptu nebo pomocí tagů jako `{include}`.
1212

1313
```php
1414
$latte->render('template.latte', ['userName' => 'Jan', 'userAge' => 30]);
@@ -45,7 +45,7 @@ Tag `{block}` se používá k definování opakovaně použitelných bloků kód
4545

4646
`{define}`
4747
----------
48-
Tag `{define}` slouží k vytváření bloků, které se renderují až po jejich zavolání pomocí `{include}`. Proměnné dostupné uvnitř těchto bloků závisí na tom, zda jsou v definici uvedeny parametry. Pokud ano, přístup mají jen k těmto parametrům. Pokud ne, přístup mají ke všem vstupním proměnným šablony, ve které jsou bloky definovány.
48+
Tag `{define}` vytváří bloky, které se renderují až po jejich explicitním zavolání pomocí `{include}`. Dostupnost proměnných uvnitř těchto bloků závisí na přítomnosti parametrů v definici. S parametry mají bloky přístup pouze k těmto parametrům. Bez parametrů mají přístup ke všem vstupním proměnným šablony, ve které jsou definovány.
4949

5050
```latte
5151
{define hello}
@@ -60,7 +60,7 @@ Tag `{define}` slouží k vytváření bloků, které se renderují až po jejic
6060

6161
`{parameters}`
6262
--------------
63-
Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony. Tímto způsobem lze snadno dokumentovat očekávané proměnné a jejich datové typy. Také je možné definovat výchozí hodnoty.
63+
Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních proměnných na začátku šablony. Tímto způsobem lze efektivně dokumentovat očekávané proměnné a jejich datové typy. Umožňuje také definovat výchozí hodnoty.
6464

6565
```latte
6666
{parameters int $age, string $name = 'neznámé'}
@@ -70,7 +70,7 @@ Tag `{parameters}` slouží k explicitní deklaraci očekávaných vstupních pr
7070

7171
`{include file}`
7272
----------------
73-
Tag `{include file}` slouží k vložení celé šablony. Této šabloně se předávají jak vstupní proměnné šablony, ve které je značka použita, tak proměnné v ní explicitně definované. Cílová šablona ale může rozsah omezit pomocí `{parameters}`.
73+
Tag `{include file}` vkládá celou šablonu. Do vkládané šablony se předávají vstupní proměnné šablony, ve které je značka použita, spolu s explicitně definovanými proměnnými. Cílová šablona může omezit rozsah přijímaných proměnných pomocí `{parameters}`.
7474

7575
```latte
7676
{include 'profile.latte', userId: $user->id}
@@ -79,7 +79,7 @@ Tag `{include file}` slouží k vložení celé šablony. Této šabloně se př
7979

8080
`{include block}`
8181
-----------------
82-
Když vkládáte blok definovaný ve stejné šabloně, předávají se do něj všechny okolní a explicitně definované proměnné:
82+
Při vkládání bloku definovaného ve stejné šabloně se do něj předávají všechny okolní a explicitně definované proměnné:
8383

8484
```latte
8585
{define blockName}
@@ -90,9 +90,9 @@ Když vkládáte blok definovaný ve stejné šabloně, předávají se do něj
9090
{include blockName}
9191
```
9292

93-
V tomto příkladu se proměnné `$name` a `$age` předají do bloku `blockName`. Stejným způsobem se chová i `{include parent}`.
93+
V tomto příkladu jsou proměnné `$name` a `$age` předány do bloku `blockName`. Stejně se chová i `{include parent}`.
9494

95-
Při vkládání bloku z jiné šablony jsou předávány pouze vstupní proměnné a explicitně definované. Okolní proměnné nejsou automaticky dostupné.
95+
Při vkládání bloku z jiné šablony se předávají pouze vstupní proměnné a explicitně definované proměnné. Okolní proměnné nejsou automaticky dostupné.
9696

9797
```latte
9898
{include blockInOtherTemplate, name: $name, age: $age}
@@ -101,7 +101,7 @@ Při vkládání bloku z jiné šablony jsou předávány pouze vstupní proměn
101101

102102
`{layout}` nebo `{extends}`
103103
---------------------------
104-
Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a dále proměnné vytvořené v kódu před bloky:
104+
Tyto tagy definují layout, do kterého se předávají vstupní proměnné podřízené šablony a proměnné vytvořené v kódu před bloky:
105105

106106
```latte
107107
{layout 'layout.latte'}
@@ -134,15 +134,15 @@ Naopak v blocích uvnitř `{embed}` je přístup ke všem okolním proměnným:
134134
{var $name = 'Jan'}
135135
{embed 'menu.latte', items: $menuItems}
136136
{block foo}
137-
{$nam}
137+
{$name}
138138
{/block}
139139
{/embed}
140140
```
141141

142142

143143
`{import}`
144144
----------
145-
Tag `{import}` se využívá pro načítání bloků z jiných šablon. Přenáší se jak vstupní, tak explicitně deklarované proměnné do importovaných bloků.
145+
Tag `{import}` se používá pro načítání bloků z jiných šablon. Do importovaných bloků se předávají jak vstupní, tak explicitně deklarované proměnné.
146146

147147
```latte
148148
{import 'buttons.latte'}
@@ -151,11 +151,13 @@ Tag `{import}` se využívá pro načítání bloků z jiných šablon. Přená
151151

152152
`{sandbox}`
153153
-----------
154-
Tag `{sandbox}` izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně.
154+
Tag `{sandbox}` izoluje šablonu pro bezpečné zpracování. Proměnné jsou předávány výhradně explicitně, což zvyšuje kontrolu nad daty vstupujícími do izolovaného prostředí.
155155

156156
```latte
157157
{sandbox 'secure.latte', data: $secureData}
158158
```
159159

160+
Tento mechanismus umožňuje přesnou kontrolu nad tím, jaká data jsou dostupná v izolované šabloně, což je užitečné pro zpracování potenciálně nebezpečného obsahu.
161+
160162

161163
{{leftbar: /@left-menu}}

0 commit comments

Comments
 (0)